PHP, NULL ve 2 tek tırnak eşit bir dize ayarı arasındaki farklar nedir

5 Cevap php

Ben boş değerler istediğim zaman bu gibi şeyleri ayarlamak için kullanılır.

$blankVar = '';

Sonra birkaç ay sonra, ben bu daha iyi baktım ve net bir niyet vardı karar verdi.

$blankVar = null;

Bu bir süre için hıçkırık çalıştı, ama son zamanlarda bir PDO ile ben bir sorun koştu ifadeleri hazırlanmıştır. '' Için bağlayıcı iken, sorgu başarısız yapılan null bir değer bağlayıcı değildi. Ben bir koşul bir araya geldi, eğer boş veri eklemek istiyorum ki, null bağlamak gerekiyordu.

2 arasındaki farklar nelerdir? Ben hala, null eşit düşünüyorum (ya da en azından sabit) iyi görünüyor, bu yüzden bu yapmalıyım?

define('EMPTY', '');

Teşekkür ederim

5 Cevap

PHP loosly yazdığınız dili olduğundan Null is just another datatype in PHP, which has only one value (null)., bu farklı değerleri nasıl işlediğini kafa karıştırıcı olabilir.

"", 0, "0", False, array(), Null Tüm PHP False olarak kabul edilir.

Null, ancak, hayvanın farklı bir türüdür. Boş kullanarak main uyumsuzluk o () isset eğer söyleyemem ki.

$x = false;
isset($x)  ->  true
echo $x    ->  ""

$y = null;
isset($y)  ->  false
echo $y    ->  ""

//$z is not set
isset($z)  ->  false
echo $z    ->  E_NOTICE

Yani boş PHP içinde (en azından bazı) Normal bir değişken kurallara uymaz anlamında garip. Çoğu durumda, bu iyi.

When it comes to database columns, PHP's NULL has no place there. Görüyorsun, SQL bir dize tabanlı bir dildir. SQL'ın NULL hiçbir tırnak ile NULL tarafından temsil edilmelidir.

Bir BOŞ alanı istiyorsanız, "" olarak ayarlayın

INSERT INTO foo SET bar = ""

Eğer boş bir alan istiyorsanız, onu NULL olarak ayarlayın

INSERT INTO foo SET bar = NULL

BÜYÜK FARK.

Doğrudan PHP NULL eklemeye çalışırsanız Ama, o (bunu alıntı eğer bağlı olarak, bir boş veya sözdizimi hatası ile size bırakır), sorguya sıfır karakterler katacak.

null kelimenin tam anlamıyla "hiçbir şey" anlamına gelir programlama dilinde özel bir yer tutucudur değerdir. Bu bir şey değil, bu boş bir dize değil, 0 değil. Bellek işaret ediliyor hiçbir değeri yoktur. Boş bir dize, diğer taraftan, halen sadece çok kısa bir dize nesne :)

Peki, (null) her yaklaşımın ne güzel görünüyor bir şey, ama temel fark, bir boş bir dize ve diğer başlatılmamış bir değişken olduğunu

Kenara Rex tarafından belirtilen farklardan, PHP karşılaştırmalar iki tür, gevşek ve sıkı var:

http://www.php.net/manual/en/types.comparisons.php

Is_null () gibi sıkı karşılaştırmaları veya fonksiyonları herhangi bir kapasite kullanılırsa, farklı sonuçlar alırsınız. Gevşek karşılaştırmalar ile, ancak, PHP oldukça yumuşak olduğunu.

Ben emin bilmiyorum, ama size sorunları (yani geçiş (string) $ blankVar) vardı bağlamda değişkeni kullanarak olduğunuzda sadece typecasting, sonra boş bir yaklaşım kullanmak mümkün olabilir. Eğer bu çalışırsa, daha az değişiklikler kod için gerekli olduğu anlamına gelebilir.

'Null' başlatılmamış değişkenler bakın ki tek şeydir. Null başvurmak için bir değişkeni ayarlayabilirsiniz. Değişken hiç yok yani 'tanımsız' durumu da vardır. Sen isset() function aracılığıyla kontrol edebilirsiniz. Çoğu zaman dizinin bir öğe varsa ve olup olmadığını kontrol etmek için kullanılır, örneğin, $ _GET ['op'] QueryString param aldı olmadığını görmek için bir yol. Ayrıca unset() function aracılığıyla (Dizinin bir öğe kaldırmak) değişken unset yapabilirsiniz. Bir function empty() değişken NULL, YANLIŞ, 0, ya da boş bir dize ya da olup olmadığını kontrol edecek olan da vardır