PHP'de Null - False - 0


146

Bana, iyi geliştiricilerin Nullve Falseve 0ve diğer tüm iyi "yok" varlıklar arasındaki farkı tespit edebileceği / kullanabileceği söylendi .
Ne olduğunu özellikle PHP farkı? Bununla bir ilgisi var ===mı?


Ne zaman kullanıldığını gerçekten anlamak neredeyse imkansız. Sanırım ne zaman nullve ne zaman kullandığınızda TUTARLI olmanız önemli false. Ben kullanmayı tercih nullbir yöntem arasında bir değer alırken ben kullanamaması için issetbir değer kullanmak yerine döndürülür olmadığını belirlemek için empty: hesapta almayacağız hangi false, 0, '0'veya boş bir dize, pek çok durumda değişkenlik değerleri olabilen. Bana göre dağınık bir yapıda en temiz çözüm.
JMRC

Yanıtlar:


221

Dile özgüdür, ancak PHP'de:

Null" hiçbir şey " anlamına gelir . Var, başlatılmadı.

False" boole bağlamında doğru değil " anlamına gelir . Mantıksal sorunlarla uğraştığınızı açıkça göstermek için kullanılır.

0bir int. Matematik için kullanılan yukarıdakilerle hiçbir ilgisi yok.

Şimdi, işin zor yanı, PHP gibi dinamik dillerde hepsinin boole bağlamında bir değeri var ki bu (PHP'de) False.

Eğer ile test ederseniz ==, boole değerini test eder, böylece eşitlik elde edersiniz. Eğer ile test ederseniz ===, tipi test edecek ve eşitsizlik elde edeceksiniz.

Öyleyse neden faydalıdırlar?

Pekala, strrpos()işleve bak . Hiçbir şey bulamadıysa False döndürür, dizenin başında bir şey bulmuşsa 0 döndürür!

<?php
// pitfall :
if (strrpos("Hello World", "Hello")) { 
    // never exectuted
}

// smart move :
if (strrpos("Hello World", "Hello") !== False) {
    // that works !
}
?>

Ve tabii ki, eyaletlerle ilgilenirseniz:

DebugMode = False(Kapalı olarak ayarlandı), DebugMode = True(açık olarak ayarlandı) ve DebugMode = Null(hiç ayarlanmadı ) arasında bir fark yaratmak istiyorsanız , zor hata ayıklamaya yol açacaktır ;-)).


39
Null hakkında not: PHP bunu "değer yok" olarak kullanır, ancak bu iyi bir alışkanlık değildir. Genel olarak Null, "değer yok" veya "başlatılmamış değişken" den farklı olan "bilinmeyen değer" anlamına gelir. Bilinmeyen değer artı bir bilinmeyen bir değer iken hiçbir şey artı 1 1'dir. Null değerine uygulanan herhangi bir işlecin null ile sonuçlanacağını (olması gerektiğini) unutmayın, çünkü "bilinmeyen değer" üzerindeki herhangi bir işlem bilinmeyen bir değerle sonuçlanır.
Eli

7
tüm niyetlerin bu olduğunu unutmayın . gerçekte olanlarla hiçbir ilgisi yok. gerçekte bir işlev, var olmayan değerler için (örn. strpos, input_filter) yanlış ve başarısızlık için null (örn. input_filter) döndürebilir. yani yanıt, belirli işlev belgelerini okuduktan sonra === false ve / veya === null kullanın.
gcb

5
@Eli: Null'un genel olarak "bilinmeyen değer" anlamına geldiği fikrini nereden alıyorsunuz? Bunun doğru olduğu herhangi bir bilgisayar dili düşünemiyorum ve bu İngilizce'de en azından bulabildiğim veya duyduğum herhangi bir tanıma göre olmadığı anlamına gelmiyor. Belki bilmediğim bir şey biliyorsundur?
iconoclast

2
@iconoclast - Bunu veritabanı dünyasından alıyorum. Anladığım kadarıyla null, veritabanında bulunmayan veya bilinmeyen bir veri değeri için yer tutucu olarak kullanılıyor. Dev.mysql.com/doc/refman/5.0/en/working-with-null.html veya en.wikipedia.org/wiki/Null_%28SQL%29 adresine bakın .
Eli

2
Eli haksız değil. Anlamsal olarak, null kullandığınızda, diğer programcılara orada ne olduğunu bilmediğinizi işaret ettiğinizi belirtiyor. Tanımsız. 0'ı kullanırken, içinde ne olduğunu bildiğinizi belirtirsiniz: bir sayı. Ve burada sayı şeylerin yokluğunu temsil ediyor. Unutmayın ki PHP değerleri ne kadar tehdit ederse etsin, değerler bir anlam taşırlar, değerlerin bir belge biçimi olduğunu unutmayın.
e-satis

46

nullolduğunu null. falseolduğunu false. Acı ama gerçek.

PHP'de çok fazla tutarlılık yoktur (en son sürümlerde gelişmesine rağmen, geriye dönük uyumluluk çok fazladır). Biraz tutarlılık isteyen tasarıma rağmen (burada seçilen cevapta özetlenmiştir), mantıklı false/ kullanımı o nullkadar kolay olmayan yöntemlerle dönen yöntemi düşündüğünüzde her şey kafa karıştırıcı hale gelir .

Bir şey için zaten false kullandıklarında, genellikle null'un kullanıldığını göreceksiniz. örneğin filter_input (). Değişken filtreyi geçemezse yanlış döndürürler ve değişken yoksa null (mevcut değil, filtrede de başarısız olduğu anlamına gelir mi?)

Yanlış / null / string / etc'yi birbirinin yerine döndüren yöntemler, yazar hatanın türünü önemsediğinde bir hack'tir; örneğin, filter_input()siz kontrol edebilirsiniz ===falseveya ===nulldoğrulamanın neden başarısız olduğunu önemsiyorsanız. Ancak bunu yapmazsanız bir tuzak olabilir, ===nullçünkü yalnızca test senaryosunu yazmayı hatırlarlarsa , çeki eklemeyi unutabilirsiniz ===false. Ve çoğu php birimi test / kapsam aracı eksik, test edilmemiş kod yolu için dikkatinizi çekmeyecektir!

Son olarak, işte tip hokkabazlık ile biraz eğlenceli. diziler veya nesneler dahil değil.

var_dump( 0<0 );        #bool(false)
var_dump( 1<0 );        #bool(false)
var_dump( -1<0 );       #bool(true)
var_dump( false<0 );    #bool(false)
var_dump( null<0 );     #bool(false)
var_dump( ''<0 );       #bool(false)
var_dump( 'a'<0 );      #bool(false)
echo "\n";
var_dump( !0 );        #bool(true)
var_dump( !1 );        #bool(false)
var_dump( !-1 );       #bool(false)
var_dump( !false );    #bool(true)
var_dump( !null );     #bool(true)
var_dump( !'' );       #bool(true)
var_dump( !'a' );      #bool(false)
echo "\n";
var_dump( false == 0 );        #bool(true)
var_dump( false == 1 );        #bool(false)
var_dump( false == -1 );       #bool(false)
var_dump( false == false );    #bool(true)
var_dump( false == null );     #bool(true)
var_dump( false == '' );       #bool(true)
var_dump( false == 'a' );      #bool(false)
echo "\n";
var_dump( null == 0 );        #bool(true)
var_dump( null == 1 );        #bool(false)
var_dump( null == -1 );       #bool(false)
var_dump( null == false );    #bool(true)
var_dump( null == null );     #bool(true)
var_dump( null == '' );       #bool(true)
var_dump( null == 'a' );      #bool(false)
echo "\n";
$a=0; var_dump( empty($a) );        #bool(true)
$a=1; var_dump( empty($a) );        #bool(false)
$a=-1; var_dump( empty($a) );       #bool(false)
$a=false; var_dump( empty($a) );    #bool(true)
$a=null; var_dump( empty($a) );     #bool(true)
$a=''; var_dump( empty($a) );       #bool(true)
$a='a'; var_dump( empty($a));      # bool(false)
echo "\n"; #new block suggested by @thehpi
var_dump( null < -1 ); #bool(true)
var_dump( null < 0 ); #bool(false)
var_dump( null < 1 ); #bool(true)
var_dump( -1 > true ); #bool(false)
var_dump( 0 > true ); #bool(false)
var_dump( 1 > true ); #bool(true)
var_dump( -1 > false ); #bool(true)
var_dump( 0 > false ); #bool(false)
var_dump( 1 > true ); #bool(true)

27
Benim görüşüme göre, 0 == null, kesinlikle saçmadır, çünkü 0 bir değerdir ve null, değişkenin başlatılmamış olduğunu gösteren bir bayraktır. Teşekkürler php ekibi
mercsen

1
İle başlayan kod bölümünü iki kez tekrarladınız var_dump( null == 0 );.
Sparky

2
php'de

1
@mercsen En azından PHP sürekli olarak 0 == null gibi davransaydı, benim için sorun olmazdı. Garip bir şekilde 0 == nullve null == []ama [] != 0!!
nawfal

1
strrpos('fail', 'search') will return false, and not nullbence doğrudur - eğer nullbilinmeyen anlamına geliyorsa , strrposgeri dönmek null, 'Dize orada değil' yerine 'dizenin orada olup olmadığını bilmiyorum' demek gibi olacaktır.
Eborbob

24

Aşağıda bir örnek verilmiştir:

            Comparisons of $x with PHP functions

Expression          gettype()   empty()     is_null()   isset() boolean : if($x)
$x = "";            string      TRUE        FALSE       TRUE    FALSE
$x = null;          NULL        TRUE        TRUE        FALSE   FALSE
var $x;             NULL        TRUE        TRUE        FALSE   FALSE
$x is undefined     NULL        TRUE        TRUE        FALSE   FALSE
$x = array();       array       TRUE        FALSE       TRUE    FALSE
$x = false;         boolean     TRUE        FALSE       TRUE    FALSE
$x = true;          boolean     FALSE       FALSE       TRUE    TRUE
$x = 1;             integer     FALSE       FALSE       TRUE    TRUE
$x = 42;            integer     FALSE       FALSE       TRUE    TRUE
$x = 0;             integer     TRUE        FALSE       TRUE    FALSE
$x = -1;            integer     FALSE       FALSE       TRUE    TRUE
$x = "1";           string      FALSE       FALSE       TRUE    TRUE
$x = "0";           string      TRUE        FALSE       TRUE    FALSE
$x = "-1";          string      FALSE       FALSE       TRUE    TRUE
$x = "php";         string      FALSE       FALSE       TRUE    TRUE
$x = "true";        string      FALSE       FALSE       TRUE    TRUE
$x = "false";       string      FALSE       FALSE       TRUE    TRUE

PHP'de tür karşılaştırmaları hakkında daha fazla referans için lütfen buna bakın . Size net bir anlayış vermelidir.


5

PHP'de === ve! == operatörlerini yalnızca değerlerin eşit olup olmadığını değil, türlerinin eşleşip eşleşmediğini de kontrol etmek için kullanabilirsiniz. Örneğin: 0 == falseis true, but 0 === falseis false. Aynı şey !=karşı için de geçerli !==. Ayrıca null, belirtilen operatörleri kullanarak diğer ikisiyle karşılaştırırsanız , benzer sonuçlar bekleyin.

Şimdi PHP'de bu değerlerin kalitesi genellikle bazen 0(sıfır) olabilen bir değer döndürürken kullanılır , ancak bazen işlev başarısız olabilir. PHP'de bu tür durumlarda geri dönersiniz falseve kimlik operatörünü kullanarak bu durumları kontrol etmeniz gerekir ===. Örneğin, bir dizenin diğerinin içinde bir konumunu arıyorsanız ve kullanıyorsanız strpos(), bu işlev dize en başında bulunursa 0 olabilecek sayısal konumu döndürür, ancak dize şu konumda bulunmazsa hepsi, sonra strpos()geri dönecek falseve sonuçla uğraşırken bunu hesaba katmalısınız.

İşlevlerinizde aynı tekniği kullanacaksanız, standart PHP kitaplığına aşina olan herhangi biri, neler olup bittiğini ve döndürülen değerin istenen değer olup olmadığını veya işlem sırasında bir hata olup olmadığını nasıl kontrol edeceğini anlayacaktır. Aynısı işlev parametreleri için de geçerlidir, diziler mi yoksa dizgeler mi olduğuna bağlı olarak bunları farklı şekilde işleyebilirsiniz ve bu teknik PHP'de de yoğun bir şekilde kullanılır, bu nedenle herkes bunu kolayca elde eder. Sanırım güç bu.


5

False, Null, Nothing, 0, Undefined , vb.

Bunların her birinin, gerçek kavramlarla ilişkili belirli anlamları vardır. Bazen birden fazla anlam, tek bir anahtar kelimeye veya değere aşırı yüklenir.

Olarak C ve C ++ , NULL, Falseve 0aynı değere aşırı yük. In C # , 3 farklı kavramları konum.

nullveya NULLgenellikle değer eksikliğini gösterir, ancak genellikle nedenini belirtmez. 0sıfır doğal sayıyı gösterir ve 1, 2, 3 vb. tür eşdeğerine sahiptir ve ayrı kavramları destekleyen dillerde NULLsadece bir sayı olarak ele alınmalıdır.

Yanlış , gerçek olmayanı gösterir. Ve ikili değerlerde kullanıldı . Bu, ayarlanmadığı anlamına gelmez, ne anlama gelir 0? Basitçe iki ikili değerden birini gösterir.

Hiçbir şey, değerin, null ile aynı şeyi gösteren, ancak niyetle özel olarak hiçbir şey olarak ayarlandığını gösteremez.

Bazı dillerde tanımsız, hiçbir kodun gerçek bir değer belirtmemesi nedeniyle değerin henüz ayarlanmaması gerektiğini gösterir.


Belki ilginç, ancak PHP'yi hiç tartışmıyor.
Brad

4

Sadece ya bir almaya çalışırken günde 1/2 boşa 0, null, falsedöndürülecek strops!

Mantığın doğru yönde akmadığını, php kodlamada bir kara delik varmış gibi görünmeden önce yapmaya çalıştığım tek şey şuydu:

Konsept, bir sunucuda barındırılan bir alan adını alır ve kök düzeyinde olmadığından emin olun, Tamam, bunu yapmanın birkaç farklı yolu, ancak yaptığım diğer php işlevleri / yapıları nedeniyle farklı seçtim.

Her neyse, burada cosing'in temeli şuydu:

if (strpos($_SERVER ['SERVER_NAME'], dirBaseNAME ()) 
{ 
    do this 
} else {
    or that
}

{
echo strpos(mydomain.co.uk, mydomain);  

if ( strpos(mydomain, xmas) == null ) 
    {
        echo "\n1 is null"; 
    }

if ( (strpos(mydomain.co.uk, mydomain)) == 0 ) 
    {
        echo "\n2 is 0"; 
    } else {
        echo "\n2 Something is WRONG"; 
    }

if ( (mydomain.co.uk, mydomain)) != 0 ) 
    {
        echo "\n3 is 0"; 
    } else {
        echo "\n3 it is not 0"; 
    }

if ( (mydomain.co.uk, mydomain)) == null ) 
    {
        echo "\n4 is null"; 
    } else {
        echo "\n4 Something is WRONG"; 
    }
}

SONUNDA bu Konuyu okuduktan sonra, bunun işe yaradığını buldum !!!

{
if ((mydomain.co.uk, mydomain)) !== false ) 
    {
        echo "\n5 is True"; 
    } else {
        echo "\n5 is False"; 
    }
}

Bu yazı için teşekkürler, şimdi anlıyorum ki Noel olsa da, Noel de olmayabilir false, çünkü bir NULLgün de olabilir !

Basit bir kodda hata ayıklamakla geçen bir günü boşa harcadıktan sonra, keşke bunu daha önce bilseydim, çünkü her yere gidip onu çalıştırmaya çalışmak yerine sorunu tanımlayabilecektim. O değil iş, olarak yaptığımız False, NULLve 0tüm olmayan aynı True or False or NULL?


2

Gönderen PHP online belgeler :

Bir değeri açıkça boolean'a dönüştürmek için (bool) veya (boolean) dönüşümlerini kullanın.
Bununla birlikte, çoğu durumda çevrim gereksizdir, çünkü bir operatör, işlev veya kontrol yapısı bir boole argümanı gerektirdiğinde bir değer otomatik olarak dönüştürülecektir.
Boole'ye dönüştürürken aşağıdaki değerler YANLIŞ olarak kabul edilir:

  • boolean FALSEkendisi
  • tamsayı `` 0 (sıfır)
  • şamandıra 0.0(sıfır)
  • boş dize ve dize "0"
  • sıfır elemanlı bir dizi
  • sıfır üye değişkenli bir nesne (yalnızca PHP 4)
  • özel tür NULL(ayarlanmayan değişkenler dahil)
  • Boş etiketlerden oluşturulan SimpleXML nesneleri
    Diğer her değer dikkate alınır TRUE(herhangi bir kaynak dahil).

Yani çoğu durumda aynıdır.

Öte yandan, ===ve ==aynı şey değildir. Düzenli olarak, sadece "eşittir" operatörüne ihtiyacınız vardır. Netleştirmek için:

$a == $b    //Equal. TRUE if $a is equal to $b.
$a === $b   //Identical. TRUE if $a is equal to $b, and they are of the same type. 

Daha fazla bilgi için, PHP çevrimiçi belgelerinde " Karşılaştırma Operatörleri " sayfasına bakın.

Bu yardımcı olur umarım.


1

Bu değerler arasındaki farklar her zaman ayrıntılı dile özgü kurallara bağlıdır. PHP için öğrendikleriniz Python, Perl veya C, vb. İçin mutlaka doğru değildir. Çalıştığınız dil (ler) için kuralları öğrenmek değerli olsa da, onlara çok fazla güvenmek sorun istemektir . Sorun, bir sonraki programcının kodunuzu korumaya ihtiyacı olduğunda ve siz (örneğin) Null ve False'ın bazı küçük ayrıntılarından yararlanan bazı yapılar kullandığınızda ortaya çıkar. Kodunuz doğru görünmelidir (ve tersine, yanlış kod yanlış görünmelidir ).


1

Null, veritabanlarında "kayıt yok" veya "bilgi yok" ifadelerini temsil etmek için kullanılır. Bu nedenle, "bu kullanıcıya bizim tarafımızdan e-posta gönderilmesini istiyor mu" şeklinde bir alanınız olabilir, burada True bunu yapar, False hiçbir şey gönderilmesini istemedikleri anlamına gelir, ancak Boş, istemediğiniz anlamına gelir. bilmiyorum. Dış birleşimlerde ve benzeri şekillerde ortaya çıkabilirler.

Null'un mantıksal çıkarımları genellikle farklıdır - bazı dillerde NULL hiçbir şeye eşit değildir, dolayısıyla if (a == NULL) her zaman yanlış olacaktır.

Şahsen ben her zaman bir boolean FALSE olarak başlatırdım ve birini NULL'a başlatmak biraz garip görünebilir (ikisinin de sadece 0 olduğu C'de bile ... sadece bir stil şeyi).


1

Bence kötü geliştiriciler, kodda null / 0 / false'ın tüm farklı kullanımlarını buluyor.

Örneğin, geliştiricilerin yaptığı en yaygın hatalardan biri, hata kodunu bir işleve sahip veri biçiminde döndürmektir.

// On error GetChar returns -1
int GetChar()

Bu bir şeker ara yüzü örneğidir. Bu, "Yazılım geliştirme işleminde hata ayıklama" kitabında ve ayrıca "doğru kod yazma" adlı başka bir kitapta açıklanmıştır.

Bununla ilgili sorun, char türüne yapılan ima veya varsayımlardır. Bazı derleyicilerde char türü imzasız olabilir. Yani -1 döndürseniz bile derleyici bunun yerine 1 döndürebilir. C ++ veya C'deki bu tür derleyici varsayımlarını tespit etmek zordur.

Bunun yerine, en iyi yol, hata kodunu verilerinizle karıştırmamaktır. Yani aşağıdaki işlev.

char GetChar()

şimdi olur

// On success return 1
// on failure return 0
bool GetChar(int &char)

Bu, geliştirme mağazanızdaki geliştirici ne kadar genç olursa olsun, bunu asla yanlış yapmayacağı anlamına gelir. Gerçi bu fazlalıktan veya koddaki bağımlılıklardan bahsetmiyor.

Yani genel olarak, dilde birinci sınıf türü olarak bool'u değiştirmek sorun değil ve bence Joel son yayınında bundan bahsetti. Ancak rutinlerinizde verilerinizle boolleri karıştırıp eşleştirmemeye çalışın ve tamamen iyi olmalısınız.


1

PHP'de türleri doğrulamanıza bağlıdır:

( 
 ( false !== 0 ) && ( false !== -1 ) && ( false == 0 ) && ( false == -1 ) &&
 ( false !== null ) && ( false == null ) 
)

Teknik olarak null, 0x00ancak PHP'de ( null == 0x00 ) && ( null !== 0x00 ).

0 bir tamsayı değeridir.


1

NULLPHP ile ilgili ilginç bir gerçek : Bir var değerini 'a eşitlerseniz NULL, onu çağırmışsınız gibi aynıdır unset().

NULLesasen bir değişkenin kendisine atanmış bir değeri olmadığı anlamına gelir; falseGeçerli bir Boole değeri, 0geçerli bir tamsayı değeridir ve PHP arasındaki oldukça çirkin dönüşümü bulunmayan 0, "0", "", ve false.


0

Null hiçbir şeydir, False birazdır ve 0 (muhtemelen) 32 bittir.

Bir PHP uzmanı değil, ancak daha modern dillerin bazılarında bunlar birbirinin yerine geçemez. 0'a sahip olmayı özledim ve yanlış birbirinin yerine geçebilir, ancak boolean gerçek bir tür olduğundan, onunla ilişkili yöntemlere ve nesnelere sahip olabilirsiniz, bu sadece bir değiş tokuş. Null null olsa da, esasen hiçbir şeyin olmaması.


0

Pekala, PHP günlerimden "===" bölümünü yanıtlayacak kadar hatırlayamıyorum, ancak çoğu C-stili dil için işaretçi değerleri bağlamında NULL kullanılmalı, boolean olarak false ve sıfır olarak int gibi sayısal değer. '\ 0' bir karakter bağlamı için geleneksel değerdir. Ben genellikle şamandıralar ve çiftler için 0.0 kullanmayı tercih ederim.

Yani .. hızlı cevap: bağlam.


0

Hemen hemen tüm modern dillerde, mantıksal olarak boş bir değere sahip olmayan işaretçiler (veya referanslar) veya başlatılmamış bir değişken anlamına gelir. 0, sıfırın tamsayı değeridir ve yanlış, yanlışın boole değeridir. İşleri karmaşık hale getirmek için, örneğin C'de null, 0 ve false aynı şekilde temsil edilir. PHP'de nasıl çalıştığını bilmiyorum.

Daha sonra, işleri daha da karmaşıklaştırmak için, veritabanlarının bir boş kavramı vardır, bu da eksik veya uygulanamaz anlamına gelir ve çoğu dilin bir DBNull'u boş değerlerine eşlemek için doğrudan bir yolu yoktur. Örneğin yakın zamana kadar, bir int'in null olmasıyla sıfır olması arasında bir fark yoktu, ancak bu, null yapılabilir ints ile değiştirildi.

Bu sesi karmaşık hale getirdiğim için üzgünüm. Sadece bu, yıllarca dillerde harry pes noktası oldu ve yakın zamana kadar hiçbir yerde net bir çözüme sahip değildi. Eskiden insanlar bir şeyleri bir araya getirir ya da boş bırakır ya da 0, veritabanındaki boş değerleri temsil eder ve bu her zaman çok iyi çalışmaz.


0

False ve 0 kavramsal olarak benzerdir, yani izomorfiktirler. 0, doğal sayıların cebiri için başlangıç ​​değeridir ve False, Boole cebri için başlangıç ​​değeridir.

Başka bir deyişle, 0, bir doğal sayıya eklendiğinde aynı sayıyı veren sayı olarak tanımlanabilir:

x + 0 = x

Benzer şekilde False, kendisinin ve diğer herhangi bir değerin kesişiminin aynı değer olduğu bir değerdir:

x || False = x

Boş, kavramsal olarak tamamen farklı bir şeydir. Dile bağlı olarak, onun için farklı anlamlar vardır, ancak hiçbiri "başlangıç ​​değerini" False ve 0 olarak tanımlamaz. Null için cebir yoktur. Değişkenlerle ilgilidir, genellikle değişkenin geçerli bağlamda belirli bir değeri olmadığını belirtmek için. Çoğu dilde, Null üzerinde tanımlanmış hiçbir işlem yoktur ve Null'u bir işlenen olarak kullanmak bir hatadır. Bazı dillerde, sona ermeyen bir hesaplamanın değeri için yer tutucu olan "boş" yerine "alt" adı verilen özel bir değer vardır.

NULL'un etkileri hakkında başka yerlerde daha kapsamlı yazdım.


1
offtopic, false == 0 tamamen geciktirilir. Daha da fazlası, php veri döndürürken VEYA bir işlevde hata verir. mysql_insert_id için dönüşe bakın. "" "Başarılı olduğunda önceki sorgu tarafından bir AUTO_INCREMENT sütunu için oluşturulan kimlik, önceki sorgu bir AUTO_INCREMENT değeri oluşturmazsa 0 veya MySQL bağlantısı kurulmamışsa FALSE." "" Temel olarak A) kimliği döndürebilir, B) sıfır, C) yanlış ... şimdi bu tablodaki 1. maddeyse, id sıfır olacak! yani üç değer de aynı! geliştirici üç tür sıfırı nasıl anlamlandırabilir? ... ve null üzerindeki gönderinize katılıyorum.
gcb

0

Biri bana 'NULL'un neden bir karşılaştırma örneğindeki bir dize olmadığını açıklayabilir?

$x = 0;
var_dump($x == 'NULL');  # TRUE   !!!WTF!!!

1
Çünkü PHP dahili olarak tamsayı türüne çevirir ve sonra karşılaştırır. php > var_dump((int) "NULL"); // => int(0) php > var_dump((int) "BLA"); // => int(0)bkz. php.net/manual/en/language.operators.comparison.php Dizeleri ve kaynakları sayılara
çevirin

-1

Hatalılıkla ilgili sorunlar PHP geçmişinden gelir. Sorun, iyi tanımlanmamış skaler türü hedefliyor.

'*' == true -> true (string match)
'*' === true -> false (numberic match)

(int)'*' == true -> false
(string)'*' == true -> true

PHP7 katılığı ileri bir adımdır, ancak yeterli olmayabilir. https://web-techno.net/typing-with-php-7-what-you-shouldnt-do/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.