Powiedziano mi, że dobrzy programiści mogą rozpoznać / wykorzystać różnicę między Nulli Falsea 0i wszystkie inne dobre „nic” podmioty.
Jaka jest różnica, szczególnie w PHP? Czy to ma coś wspólnego ===?
Prawie niemożliwe jest ustalenie, kiedy to jest używane. Myślę, że ważne jest, abyś był KONSEKWENTNY, kiedy używasz nulli kiedy false. I wolą używać nullpodczas pobierania wartości z metody, ponieważ mogę użyć issetw celu określenia, czy dana wartość jest zwracana zamiast używania empty, które nie będzie uwzględniające: false, 0, '0'lub pusty ciąg znaków, który może być realne wartości w wielu sytuacjach. Dla mnie to najczystsze rozwiązanie w bałaganiarskiej konstrukcji.
JMRC
Odpowiedzi:
221
Jest to specyficzne dla języka, ale w PHP:
Nullznaczy „ nic ”. Zmienna nie została zainicjowana.
Falseoznacza „ nieprawda w kontekście boolowskim ”. Używane do wyraźnego pokazania, że masz do czynienia z problemami logicznymi.
0 jest int . Nie ma nic wspólnego z resztą powyżej, używaną do matematyki.
Trudne jest to, że w językach dynamicznych, takich jak PHP, wszystkie mają wartość w kontekście logicznym , którym (w PHP) jestFalse .
Jeśli przetestujesz to z ==, testuje wartość logiczną, więc uzyskasz równość. Jeśli przetestujesz to z=== , przetestuje typ, a otrzymasz nierówność.
Dlaczego więc są przydatne?
Cóż, spójrz na strrpos()funkcję. Zwraca False, jeśli nic nie znalazł, ale 0, jeśli znalazł coś na początku ciągu!
<?php
// pitfall :if(strrpos("Hello World","Hello")){// never exectuted}// smart move :if(strrpos("Hello World","Hello")!==False){// that works !}?>
I oczywiście, jeśli masz do czynienia ze stanami:
Chcesz zrobić różnicę między DebugMode = False(ustawione na wyłączone), DebugMode = True(ustawione na włączone) i DebugMode = Null(w ogóle nie ustawione, doprowadzi do trudnego debugowania ;-)).
Uwaga na temat wartości Null: PHP używa go jako „bez wartości”, ale nie jest to dobry nawyk. Ogólnie rzecz biorąc, Null oznacza „nieznaną wartość”, która różni się od „brak wartości” lub „niezainicjowana zmienna”. Nic plus 1 to 1, podczas gdy nieznana wartość plus jedynka to nieznana wartość. Pamiętaj tylko, że każdy operator zastosowany do wartości null da (powinien) dać null, ponieważ każda operacja na „nieznanej wartości” skutkuje nieznaną wartością.
Eli
7
pamiętaj, że to wszystko intencje . nie ma nic wspólnego z tym, co dzieje się w rzeczywistości. w rzeczywistości funkcja może zwrócić false dla nieistniejących wartości (np. strpos, input_filter) i null dla błędu (np. input_filter). więc odpowiedź brzmi: użyj === false i / lub === null, po przeczytaniu tej konkretnej dokumentacji funkcji.
gcb
5
@Eli: skąd pomysł, że Null oznacza ogólnie „nieznaną wartość”. Nie przychodzi mi do głowy żaden język komputerowy, w którym jest to prawdą, ani nie oznacza to, że w języku angielskim, przynajmniej nie zgodnie z jakąkolwiek definicją, którą mogę znaleźć lub usłyszeć. Może wiesz coś, czego ja nie wiem?
Eli się nie myli. Twierdzi, że semantycznie, kiedy używasz null, sygnalizujesz innym programistom, że nie wiesz, co tam jest. To jest nieokreślone. Kiedy używasz 0, sygnalizujesz, że wiesz, co tam jest: liczba. A tutaj liczba oznacza brak rzeczy. Pamiętaj, że niezależnie od tego, jakie wartości zagrożenia PHP mają znaczenie, wartości są formą dokumentacji.
e-satis
45
nulljest null. falsejestfalse . Smutne ale prawdziwe.
nie ma dużej spójności w PHP. programiści TRY aby wartość null oznaczała „nieznany” lub „nieistniejący”. ale często False będzie służyć jako „nieistniejący” (np. strrpos („fail”, „search”) zwróci wartość false, a nie null)
często zobaczysz null używane, gdy już używają fałszu do czegoś. np. filter_input (). Zwracają fałsz, jeśli zmienna nie przejdzie filtru. i null, jeśli zmienna nie istnieje (nie istnieje oznacza, że również nie przeszła filtru? więc po co zwracać wartość null?!?)
php ma wygodę zwracania danych w funkcjach. i często programiści wbijają wszelkiego rodzaju statusy awarii zamiast danych.
W PHP nie ma rozsądnego sposobu wykrywania danych (int, str, itp.) Przed awarią (false, null)
w zasadzie zawsze musisz sprawdzać, czy === null lub === false, w zależności od funkcji. lub dla obu, w przypadkach takich jak filter_input () / filter_var ()
a oto trochę zabawy z żonglowaniem typami. nawet nie uwzględniając tablic i obiektów.
w mojej opinii 0 == null jest absolutnym nonsensem, ponieważ 0 jest wartością, a null jest flagą, która pokazuje, że zmienna jest niezainicjalizowana. Dzięki zespołowi php
mercsen
1
Dwa razy powtórzyłeś swoją sekcję kodu zaczynającą się od var_dump( null == 0 );.
Sparky
2
co jest naprawdę dziwne w php: null <-1 => TRUE
thehpi
1
@mercsen Przynajmniej gdyby PHP konsekwentnie zachowywał się jak 0 == null, byłbym z nim w porządku. Dziwne 0 == nulli null == [], ale [] != 0!!
nawfal
1
strrpos('fail', 'search') will return false, and not nullmoim zdaniem jest poprawne - jeśli nulloznacza nieznane, to strrposzwrócenie nullbyłoby takie, jak powiedzenie „Nie wiem, czy ciąg tam jest”, a nie „Ciąg nie istnieje”.
W PHP możesz użyć operatorów === i! ==, aby sprawdzić nie tylko, czy wartości są równe, ale także, czy ich typy są zgodne. Na przykład: 0 == falsejest true, ale 0 === falsejest false. To samo dotyczy !=versus !==. Również w przypadku porównanianull z pozostałymi dwoma przy użyciu wspomnianych operatorów, spodziewaj się podobnych wyników.
Teraz w PHP ta jakość wartości jest zwykle używana podczas zwracania wartości, która czasami może wynosić 0(zero), ale czasami może się zdarzyć, że funkcja zawiodła. W takich przypadkach w PHP wracasz falsei musisz sprawdzić te przypadki za pomocą operatora tożsamości ===. Na przykład, jeśli szukasz pozycji jednego ciągu w drugim i używasz strpos(), ta funkcja zwróci pozycję numeryczną, która może wynosić 0, jeśli ciąg znajduje się na samym początku, ale jeśli nie znaleziono ciągu wszystko, a potem strpos()wrócifalse i musisz wziąć to pod uwagę, mając do czynienia z wynikiem.
Jeśli użyjesz tej samej techniki w swoich funkcjach, każdy, kto zna standardową bibliotekę PHP, zrozumie, co się dzieje i jak sprawdzić, czy zwracana wartość jest tym, czego oczekuje, lub czy wystąpił jakiś błąd podczas przetwarzania. To samo dotyczy parametrów funkcji, możesz je przetwarzać w różny sposób w zależności od tego, czy są to tablice, łańcuchy, czy też nie, a ta technika jest również używana w całym PHP, więc każdy może ją łatwo uzyskać. Więc myślę, że to jest moc.
Każdy z nich ma określone znaczenie, które koreluje z rzeczywistymi pojęciami. Czasami wiele znaczeń jest przeciążanych w jednym słowie kluczowym lub wartości.
W C i C ++ , NULL, Falsei 0są przeciążone do tej samej wartości. W C # są to 3 różne koncepcje.
nulllub NULLzwykle wskazuje na brak wartości, ale zwykle nie określa, dlaczego.
0wskazuje liczbę naturalną zero i ma równoważność typu do 1, 2, 3 itd., aw językach obsługujących odrębne pojęcia NULLnależy traktować tylko liczbę.
Fałsz oznacza nieprawdę . I używany w wartościach binarnych . Nie oznacza to, że jesteś niezadowolony, ani nie oznacza 0. Po prostu wskazuje jedną z dwóch wartości binarnych.
Nic nie może wskazywać, że wartość jest specjalnie ustawiona na nic, co wskazuje na to samo co null, ale z zamiarem.
Wartość undefined w niektórych językach wskazuje, że wartość nie została jeszcze ustawiona, ponieważ żaden kod nie określił rzeczywistej wartości.
Być może interesujące, ale w ogóle nie omawia PHP.
Brad,
4
Właśnie zmarnowany 1/2 dzień próbuje dostać albo 0, null, falseaby powrócić zstrops !
Oto wszystko, co próbowałem zrobić, zanim odkryłem, że logika nie płynie we właściwym kierunku, wyglądając na czarną dziurę w kodowaniu php:
Pomysł weź nazwę domeny hostowanej na serwerze i upewnij się, że nie jest to poziom root. OK, kilka różnych sposobów, aby to zrobić, ale wybrałem inną ze względu na inne funkcje / konstrukcje php, które zrobiłem.
Zresztą tutaj była podstawa stwierdzenia:
if(strpos($_SERVER ['SERVER_NAME'], dirBaseNAME ()){dothis}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";}}
WRESZCIE po przeczytaniu tego tematu stwierdziłem, że to zadziałało !!!
{if((mydomain.co.uk, mydomain))!==false){
echo "\n5 is True";}else{
echo "\n5 is False";}}
Dzięki za ten artykuł, teraz rozumiem, że nawet jeśli są Święta Bożego Narodzenia, może to nie być Boże Narodzenie false, ponieważ może to byćNULL dzień!
Po zmarnowaniu dnia na debugowanie prostego kodu, żałowałem, że nie wiedziałem o tym wcześniej, ponieważ nie byłbym w stanie zidentyfikować problemu, zamiast chodzić po całym miejscu, próbując go uruchomić. To nie działa, jak False, NULLi 0nie wszystkie są takie same, jak True or False or NULL?
Aby jawnie przekonwertować wartość na wartość logiczną, użyj rzutowania (bool) lub (boolean).
Jednak w większości przypadków rzutowanie nie jest konieczne, ponieważ wartość zostanie automatycznie przekonwertowana, jeśli operator, funkcja lub struktura kontrolna wymaga argumentu logicznego.
Podczas konwersji na wartość logiczną następujące wartości są uważane za FAŁSZ:
wartość logiczna FALSEsama wartość
liczba całkowita `` 0 (zero)
pływak 0.0 (zero)
pusty ciąg i ciąg "0"
tablica z zerowymi elementami
obiekt bez zmiennych składowych (tylko PHP 4)
specjalny typ NULL (w tym nieustawione zmienne)
Obiekty SimpleXML utworzone z pustych znaczników
Pod uwagę brana jest każda inna wartość TRUE(w tym dowolny zasób).
Więc w większości przypadków jest tak samo.
Z drugiej strony, ===i ==nie są tym samym. Zwykle wystarczy operator „równa się”. W celu wyjaśnienia:
$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.
Aby uzyskać więcej informacji, zobacz „ Operatory porównania ” w dokumentacji PHP online.
Różnice między tymi wartościami zawsze sprowadzają się do szczegółowych zasad specyficznych dla języka. To, czego nauczysz się w PHP niekoniecznie jest prawdą w przypadku Pythona, Perla, C, itp. Chociaż nauczenie się reguł dla języków, z którymi pracujesz, jest cenne, zbytnie poleganie na nich to proszenie się o kłopoty . Problem pojawia się, gdy następny programista musi utrzymywać twój kod i użyłeś jakiejś konstrukcji, która wykorzystuje kilka drobnych szczegółów Null vs. False (na przykład). Twój kod powinien wyglądać poprawnie (i odwrotnie, zły kod powinien wyglądać źle ).
Wartość Null jest używana w bazach danych do reprezentowania „brak rekordu” lub „brak informacji”. Więc możesz mieć pole bitowe, które opisuje "czy ten użytkownik chce, abyśmy wysyłali e-maile", gdzie True oznacza, że tak, False oznacza, że nie chcą, aby nic im wysyłano, ale Null oznaczałoby, że nie nie wiem. Mogą powstać przez połączenia zewnętrzne i tym podobne.
Logiczne implikacje wartości Null są często różne - w niektórych językach NULL nie jest niczym, więc if (a == NULL) zawsze będzie fałszywe.
Osobiście zawsze inicjowałbym wartość logiczną na FALSE, a inicjalizacja jednego na NULL wyglądałaby trochę obrzydliwie (nawet w C, gdzie oba są po prostu 0 ... tylko styl).
Myślę, że źli programiści znajdują różne zastosowania null / 0 / false w kodzie.
Na przykład jednym z najczęstszych błędów popełnianych przez programistów jest zwracanie kodu błędu w postaci danych z funkcją.
// On error GetChar returns -1intGetChar()
To jest przykład interfejsu cukru. Jest to wyjaśnione w książce „Debuging the software development Proccess”, a także w innej książce „Pisanie poprawnego kodu”.
Problem z tym polega na implikacji lub założeniach dotyczących typu char. W niektórych kompilatorach typ char może być niepodpisany. Więc nawet jeśli zwracasz -1, kompilator może zamiast tego zwrócić 1. Tego rodzaju założenia kompilatora w C ++ lub C są trudne do zauważenia.
Najlepszym sposobem jest nie mieszanie kodu błędu z danymi. Więc następująca funkcja.
charGetChar()
teraz staje się
// On success return 1// on failure return 0boolGetChar(int&char)
Oznacza to, że bez względu na to, jak młody jest programista w twoim sklepie deweloperskim, nigdy nie zrozumie tego źle. Chociaż nie mówi to o redudancji lub zależnościach w kodzie.
Ogólnie rzecz biorąc, zamiana bool jako pierwszej klasy w języku jest w porządku i myślę, że Joel mówił o tym w swoim ostatnim postcastie. Ale staraj się nie używać funkcji mieszania i dopasowywania do danych w swoich procedurach, a wszystko powinno być w porządku.
Ciekawostka dotycząca NULLPHP: Jeśli ustawisz zmienną na równą NULL, jest to tak samo, jak gdybyś ją wywołał unset().
NULLzasadniczo oznacza, że zmienna nie ma przypisanej wartości; falseJest to ważna wartość logiczna, 0jest prawidłową wartością całkowitą, a PHP ma kilka dość brzydkie konwersje pomiędzy 0, "0", "", i false.
Null to nic, False to trochę, a 0 to (prawdopodobnie) 32 bity.
Nie jest ekspertem od PHP, ale w niektórych bardziej nowoczesnych językach nie można ich używać zamiennie. Trochę mi brakuje, aby 0 i false były wymienne, ale ponieważ boolean jest rzeczywistym typem, możesz powiązać z nim metody i obiekty, więc to tylko kompromis. Null jest jednak zerowy, zasadniczo brak czegokolwiek.
Cóż, nie pamiętam wystarczająco dużo z moich dni w PHP, aby odpowiedzieć na część "===", ale dla większości języków w stylu C, NULL powinno być używane w kontekście wartości wskaźnika, false jako wartość logiczną, a zero jako wartość liczbowa, taka jak int. „\ 0” to zwyczajowa wartość kontekstu znakowego. Zwykle wolę też używać 0,0 do gier zmiennoprzecinkowych i podwójnych.
Prawie we wszystkich współczesnych językach, logicznie null odnosi się do wskaźników (lub odniesień), które nie mają wartości lub do zmiennej, która nie została zainicjowana. 0 to liczba całkowita równa zero, a fałsz to wartość logiczna, cóż, fałsz. Aby skomplikować sprawę, na przykład w języku C wartości null, 0 i false są reprezentowane dokładnie w ten sam sposób. Nie wiem, jak to działa w PHP.
Następnie, aby jeszcze bardziej skomplikować sprawę, w bazach danych występuje koncepcja null, co oznacza brakujące lub nie nadające się do zastosowania, a większość języków nie ma bezpośredniego sposobu odwzorowania DBNull na ich wartość null. Na przykład do niedawna nie było rozróżnienia między wartością int będącą wartością zerową a zerową, ale zostało to zmienione za pomocą liczb całkowitych dopuszczających wartość null.
Przepraszam, że ten dźwięk jest skomplikowany. Tyle, że od lat jest to ostry punkt widzenia w językach, a do niedawna nigdzie nie miał żadnego wyraźnego rozwiązania. Ludzie zwykli po prostu łączyć ze sobą rzeczy lub robić puste lub 0 reprezentujące wartości null w bazie danych, co nie zawsze działa zbyt dobrze.
Fałsz i 0 są koncepcyjnie podobne, tj. Są izomorficzne. 0 to wartość początkowa algebry liczb naturalnych, a fałsz to wartość początkowa algebry Boole'a.
Innymi słowy, 0 można zdefiniować jako liczbę, która po dodaniu do jakiejś liczby naturalnej daje tę samą liczbę:
x +0= x
Podobnie Fałsz jest wartością taką, że jej dysjunkcja i każda inna wartość jest tą samą wartością:
x ||False= x
Null jest koncepcyjnie czymś zupełnie innym. W zależności od języka istnieją różne semantyki, ale żadna z nich nie opisuje „wartości początkowej” jako Fałsz, a 0 tak. Nie ma algebry dla Null. Odnosi się do zmiennych, zwykle w celu wskazania, że zmienna nie ma określonej wartości w bieżącym kontekście. W większości języków nie ma żadnych operacji zdefiniowanych na wartości Null, a używanie wartości Null jako operandu jest błędem. W niektórych językach istnieje specjalna wartość o nazwie „bottom” zamiast „null”, która jest symbolem zastępczym dla wartości obliczenia, które się nie kończy.
offtopic, false == 0 jest całkowicie opóźnione. Tym bardziej, że php zwraca dane LUB awarię funkcji. zobacz zwrot dla mysql_insert_id. "" "Identyfikator wygenerowany dla kolumny AUTO_INCREMENT przez poprzednie zapytanie w przypadku pomyślnego zakończenia, 0 jeśli poprzednie zapytanie nie generuje wartości AUTO_INCREMENT lub FALSE, jeśli nie nawiązano połączenia z MySQL." "" W zasadzie może zwrócić A) identyfikator, B) zero, C) fałsz ... teraz, jeśli jest to pierwsza pozycja w tabeli, id będzie równe zero! więc wszystkie trzy wartości są takie same! w jaki sposób programista może zrozumieć trzy typy zer? ... i zgadzam się z twoim postem na null.
gcb
0
Ktoś może mi wyjaśnić, dlaczego „NULL” nie jest tylko ciągiem znaków w przypadku porównania?
null
i kiedyfalse
. I wolą używaćnull
podczas pobierania wartości z metody, ponieważ mogę użyćisset
w celu określenia, czy dana wartość jest zwracana zamiast używaniaempty
, które nie będzie uwzględniające:false
,0
,'0'
lub pusty ciąg znaków, który może być realne wartości w wielu sytuacjach. Dla mnie to najczystsze rozwiązanie w bałaganiarskiej konstrukcji.Odpowiedzi:
Jest to specyficzne dla języka, ale w PHP:
Null
znaczy „ nic ”. Zmienna nie została zainicjowana.False
oznacza „ nieprawda w kontekście boolowskim ”. Używane do wyraźnego pokazania, że masz do czynienia z problemami logicznymi.0
jestint
. Nie ma nic wspólnego z resztą powyżej, używaną do matematyki.Trudne jest to, że w językach dynamicznych, takich jak PHP, wszystkie mają wartość w kontekście logicznym , którym (w PHP) jest
False
.Jeśli przetestujesz to z
==
, testuje wartość logiczną, więc uzyskasz równość. Jeśli przetestujesz to z===
, przetestuje typ, a otrzymasz nierówność.Dlaczego więc są przydatne?
Cóż, spójrz na
strrpos()
funkcję. Zwraca False, jeśli nic nie znalazł, ale 0, jeśli znalazł coś na początku ciągu!I oczywiście, jeśli masz do czynienia ze stanami:
Chcesz zrobić różnicę między
DebugMode = False
(ustawione na wyłączone),DebugMode = True
(ustawione na włączone) iDebugMode = Null
(w ogóle nie ustawione, doprowadzi do trudnego debugowania ;-)).źródło
null
jestnull
.false
jestfalse
. Smutne ale prawdziwe.nie ma dużej spójności w PHP. programiści TRY aby wartość null oznaczała „nieznany” lub „nieistniejący”. ale często False będzie służyć jako „nieistniejący” (np. strrpos („fail”, „search”) zwróci wartość false, a nie null)
często zobaczysz null używane, gdy już używają fałszu do czegoś. np. filter_input (). Zwracają fałsz, jeśli zmienna nie przejdzie filtru. i null, jeśli zmienna nie istnieje (nie istnieje oznacza, że również nie przeszła filtru? więc po co zwracać wartość null?!?)
php ma wygodę zwracania danych w funkcjach. i często programiści wbijają wszelkiego rodzaju statusy awarii zamiast danych.
W PHP nie ma rozsądnego sposobu wykrywania danych (int, str, itp.) Przed awarią (false, null)
w zasadzie zawsze musisz sprawdzać, czy === null lub === false, w zależności od funkcji. lub dla obu, w przypadkach takich jak filter_input () / filter_var ()
a oto trochę zabawy z żonglowaniem typami. nawet nie uwzględniając tablic i obiektów.
źródło
var_dump( null == 0 );
.0 == null
inull == []
, ale[] != 0
!!strrpos('fail', 'search') will return false, and not null
moim zdaniem jest poprawne - jeślinull
oznacza nieznane, tostrrpos
zwrócenienull
byłoby takie, jak powiedzenie „Nie wiem, czy ciąg tam jest”, a nie „Ciąg nie istnieje”.Poniżej przykład:
Zobacz to, aby uzyskać więcej informacji na temat porównań typów w PHP. Powinien dać ci jasne zrozumienie.
źródło
W PHP możesz użyć operatorów === i! ==, aby sprawdzić nie tylko, czy wartości są równe, ale także, czy ich typy są zgodne. Na przykład:
0 == false
jesttrue
, ale0 === false
jestfalse
. To samo dotyczy!=
versus!==
. Również w przypadku porównanianull
z pozostałymi dwoma przy użyciu wspomnianych operatorów, spodziewaj się podobnych wyników.Teraz w PHP ta jakość wartości jest zwykle używana podczas zwracania wartości, która czasami może wynosić
0
(zero), ale czasami może się zdarzyć, że funkcja zawiodła. W takich przypadkach w PHP wracaszfalse
i musisz sprawdzić te przypadki za pomocą operatora tożsamości===
. Na przykład, jeśli szukasz pozycji jednego ciągu w drugim i używaszstrpos()
, ta funkcja zwróci pozycję numeryczną, która może wynosić 0, jeśli ciąg znajduje się na samym początku, ale jeśli nie znaleziono ciągu wszystko, a potemstrpos()
wrócifalse
i musisz wziąć to pod uwagę, mając do czynienia z wynikiem.Jeśli użyjesz tej samej techniki w swoich funkcjach, każdy, kto zna standardową bibliotekę PHP, zrozumie, co się dzieje i jak sprawdzić, czy zwracana wartość jest tym, czego oczekuje, lub czy wystąpił jakiś błąd podczas przetwarzania. To samo dotyczy parametrów funkcji, możesz je przetwarzać w różny sposób w zależności od tego, czy są to tablice, łańcuchy, czy też nie, a ta technika jest również używana w całym PHP, więc każdy może ją łatwo uzyskać. Więc myślę, że to jest moc.
źródło
False, Null, Nothing, 0, Undefined itd., Itd.
Każdy z nich ma określone znaczenie, które koreluje z rzeczywistymi pojęciami. Czasami wiele znaczeń jest przeciążanych w jednym słowie kluczowym lub wartości.
W C i C ++ ,
NULL
,False
i0
są przeciążone do tej samej wartości. W C # są to 3 różne koncepcje.null
lubNULL
zwykle wskazuje na brak wartości, ale zwykle nie określa, dlaczego.0
wskazuje liczbę naturalną zero i ma równoważność typu do 1, 2, 3 itd., aw językach obsługujących odrębne pojęciaNULL
należy traktować tylko liczbę.Fałsz oznacza nieprawdę . I używany w wartościach binarnych . Nie oznacza to, że jesteś niezadowolony, ani nie oznacza
0
. Po prostu wskazuje jedną z dwóch wartości binarnych.Nic nie może wskazywać, że wartość jest specjalnie ustawiona na nic, co wskazuje na to samo co null, ale z zamiarem.
Wartość undefined w niektórych językach wskazuje, że wartość nie została jeszcze ustawiona, ponieważ żaden kod nie określił rzeczywistej wartości.
źródło
Właśnie zmarnowany 1/2 dzień próbuje dostać albo
0
,null
,false
aby powrócić zstrops
!Oto wszystko, co próbowałem zrobić, zanim odkryłem, że logika nie płynie we właściwym kierunku, wyglądając na czarną dziurę w kodowaniu php:
Pomysł weź nazwę domeny hostowanej na serwerze i upewnij się, że nie jest to poziom root. OK, kilka różnych sposobów, aby to zrobić, ale wybrałem inną ze względu na inne funkcje / konstrukcje php, które zrobiłem.
Zresztą tutaj była podstawa stwierdzenia:
WRESZCIE po przeczytaniu tego tematu stwierdziłem, że to zadziałało !!!
Dzięki za ten artykuł, teraz rozumiem, że nawet jeśli są Święta Bożego Narodzenia, może to nie być Boże Narodzenie
false
, ponieważ może to byćNULL
dzień!Po zmarnowaniu dnia na debugowanie prostego kodu, żałowałem, że nie wiedziałem o tym wcześniej, ponieważ nie byłbym w stanie zidentyfikować problemu, zamiast chodzić po całym miejscu, próbując go uruchomić. To nie działa, jak
False
,NULL
i0
nie wszystkie są takie same, jakTrue or False or NULL
?źródło
Z dokumentacji online PHP :
FALSE
sama wartość0.0
(zero)"0"
NULL
(w tym nieustawione zmienne)Pod uwagę brana jest każda inna wartość
TRUE
(w tym dowolny zasób).Więc w większości przypadków jest tak samo.
Z drugiej strony,
===
i==
nie są tym samym. Zwykle wystarczy operator „równa się”. W celu wyjaśnienia:Aby uzyskać więcej informacji, zobacz „ Operatory porównania ” w dokumentacji PHP online.
Mam nadzieję że to pomoże.
źródło
Różnice między tymi wartościami zawsze sprowadzają się do szczegółowych zasad specyficznych dla języka. To, czego nauczysz się w PHP niekoniecznie jest prawdą w przypadku Pythona, Perla, C, itp. Chociaż nauczenie się reguł dla języków, z którymi pracujesz, jest cenne, zbytnie poleganie na nich to proszenie się o kłopoty . Problem pojawia się, gdy następny programista musi utrzymywać twój kod i użyłeś jakiejś konstrukcji, która wykorzystuje kilka drobnych szczegółów Null vs. False (na przykład). Twój kod powinien wyglądać poprawnie (i odwrotnie, zły kod powinien wyglądać źle ).
źródło
Wartość Null jest używana w bazach danych do reprezentowania „brak rekordu” lub „brak informacji”. Więc możesz mieć pole bitowe, które opisuje "czy ten użytkownik chce, abyśmy wysyłali e-maile", gdzie True oznacza, że tak, False oznacza, że nie chcą, aby nic im wysyłano, ale Null oznaczałoby, że nie nie wiem. Mogą powstać przez połączenia zewnętrzne i tym podobne.
Logiczne implikacje wartości Null są często różne - w niektórych językach NULL nie jest niczym, więc if (a == NULL) zawsze będzie fałszywe.
Osobiście zawsze inicjowałbym wartość logiczną na FALSE, a inicjalizacja jednego na NULL wyglądałaby trochę obrzydliwie (nawet w C, gdzie oba są po prostu 0 ... tylko styl).
źródło
Myślę, że źli programiści znajdują różne zastosowania null / 0 / false w kodzie.
Na przykład jednym z najczęstszych błędów popełnianych przez programistów jest zwracanie kodu błędu w postaci danych z funkcją.
To jest przykład interfejsu cukru. Jest to wyjaśnione w książce „Debuging the software development Proccess”, a także w innej książce „Pisanie poprawnego kodu”.
Problem z tym polega na implikacji lub założeniach dotyczących typu char. W niektórych kompilatorach typ char może być niepodpisany. Więc nawet jeśli zwracasz -1, kompilator może zamiast tego zwrócić 1. Tego rodzaju założenia kompilatora w C ++ lub C są trudne do zauważenia.
Najlepszym sposobem jest nie mieszanie kodu błędu z danymi. Więc następująca funkcja.
teraz staje się
Oznacza to, że bez względu na to, jak młody jest programista w twoim sklepie deweloperskim, nigdy nie zrozumie tego źle. Chociaż nie mówi to o redudancji lub zależnościach w kodzie.
Ogólnie rzecz biorąc, zamiana bool jako pierwszej klasy w języku jest w porządku i myślę, że Joel mówił o tym w swoim ostatnim postcastie. Ale staraj się nie używać funkcji mieszania i dopasowywania do danych w swoich procedurach, a wszystko powinno być w porządku.
źródło
W PHP zależy to od tego, czy walidujesz typy:
Technicznie null jest
0x00
w PHP( null == 0x00 ) && ( null !== 0x00 )
.0
jest wartością całkowitą.źródło
Ciekawostka dotycząca
NULL
PHP: Jeśli ustawisz zmienną na równąNULL
, jest to tak samo, jak gdybyś ją wywołałunset()
.NULL
zasadniczo oznacza, że zmienna nie ma przypisanej wartości;false
Jest to ważna wartość logiczna,0
jest prawidłową wartością całkowitą, a PHP ma kilka dość brzydkie konwersje pomiędzy0
,"0"
,""
, ifalse
.źródło
Null to nic, False to trochę, a 0 to (prawdopodobnie) 32 bity.
Nie jest ekspertem od PHP, ale w niektórych bardziej nowoczesnych językach nie można ich używać zamiennie. Trochę mi brakuje, aby 0 i false były wymienne, ale ponieważ boolean jest rzeczywistym typem, możesz powiązać z nim metody i obiekty, więc to tylko kompromis. Null jest jednak zerowy, zasadniczo brak czegokolwiek.
źródło
Cóż, nie pamiętam wystarczająco dużo z moich dni w PHP, aby odpowiedzieć na część "===", ale dla większości języków w stylu C, NULL powinno być używane w kontekście wartości wskaźnika, false jako wartość logiczną, a zero jako wartość liczbowa, taka jak int. „\ 0” to zwyczajowa wartość kontekstu znakowego. Zwykle wolę też używać 0,0 do gier zmiennoprzecinkowych i podwójnych.
A więc ... szybka odpowiedź brzmi: kontekst.
źródło
Prawie we wszystkich współczesnych językach, logicznie null odnosi się do wskaźników (lub odniesień), które nie mają wartości lub do zmiennej, która nie została zainicjowana. 0 to liczba całkowita równa zero, a fałsz to wartość logiczna, cóż, fałsz. Aby skomplikować sprawę, na przykład w języku C wartości null, 0 i false są reprezentowane dokładnie w ten sam sposób. Nie wiem, jak to działa w PHP.
Następnie, aby jeszcze bardziej skomplikować sprawę, w bazach danych występuje koncepcja null, co oznacza brakujące lub nie nadające się do zastosowania, a większość języków nie ma bezpośredniego sposobu odwzorowania DBNull na ich wartość null. Na przykład do niedawna nie było rozróżnienia między wartością int będącą wartością zerową a zerową, ale zostało to zmienione za pomocą liczb całkowitych dopuszczających wartość null.
Przepraszam, że ten dźwięk jest skomplikowany. Tyle, że od lat jest to ostry punkt widzenia w językach, a do niedawna nigdzie nie miał żadnego wyraźnego rozwiązania. Ludzie zwykli po prostu łączyć ze sobą rzeczy lub robić puste lub 0 reprezentujące wartości null w bazie danych, co nie zawsze działa zbyt dobrze.
źródło
Fałsz i 0 są koncepcyjnie podobne, tj. Są izomorficzne. 0 to wartość początkowa algebry liczb naturalnych, a fałsz to wartość początkowa algebry Boole'a.
Innymi słowy, 0 można zdefiniować jako liczbę, która po dodaniu do jakiejś liczby naturalnej daje tę samą liczbę:
Podobnie Fałsz jest wartością taką, że jej dysjunkcja i każda inna wartość jest tą samą wartością:
Null jest koncepcyjnie czymś zupełnie innym. W zależności od języka istnieją różne semantyki, ale żadna z nich nie opisuje „wartości początkowej” jako Fałsz, a 0 tak. Nie ma algebry dla Null. Odnosi się do zmiennych, zwykle w celu wskazania, że zmienna nie ma określonej wartości w bieżącym kontekście. W większości języków nie ma żadnych operacji zdefiniowanych na wartości Null, a używanie wartości Null jako operandu jest błędem. W niektórych językach istnieje specjalna wartość o nazwie „bottom” zamiast „null”, która jest symbolem zastępczym dla wartości obliczenia, które się nie kończy.
O implikacjach NULL pisałem szerzej w innym miejscu.
źródło
Ktoś może mi wyjaśnić, dlaczego „NULL” nie jest tylko ciągiem znaków w przypadku porównania?
źródło
php > var_dump((int) "NULL"); // => int(0)
php > var_dump((int) "BLA"); // => int(0)
zobacz php.net/manual/en/language.operators.comparison.php Przetłumacz ciągi i zasoby na liczby, zwykła matematykaProblemy z fałszywością pochodzą z historii PHP. Problem dotyczy słabo zdefiniowanego typu skalarnego.
Ścisłość PHP7 jest krokiem naprzód, ale może nie wystarczy. https://web-techno.net/typing-with-php-7-what-you-shouldnt-do/
źródło