मुझे बताया गया है कि अच्छे डेवलपर्स अंतर Null
और / False
और 0
अन्य सभी अच्छे "कुछ भी नहीं" संस्थाओं के बीच अंतर का उपयोग कर सकते हैं ।
क्या है अंतर, पीएचपी में विशेष रूप से? क्या इसके साथ कुछ करना है ===
?
मुझे बताया गया है कि अच्छे डेवलपर्स अंतर Null
और / False
और 0
अन्य सभी अच्छे "कुछ भी नहीं" संस्थाओं के बीच अंतर का उपयोग कर सकते हैं ।
क्या है अंतर, पीएचपी में विशेष रूप से? क्या इसके साथ कुछ करना है ===
?
जवाबों:
Null
" कुछ नहीं " का अर्थ है । Var को प्रारंभ नहीं किया गया है।
False
" बूलियन संदर्भ में सच नहीं है "। आप स्पष्ट रूप से तार्किक मुद्दों के साथ काम कर रहे हैं दिखाने के लिए इस्तेमाल किया।
0
एक है int
। बाकी के ऊपर कुछ भी नहीं करना है, गणित के लिए उपयोग किया जाता है।
अब, क्या मुश्किल है, यह है कि PHP जैसी गतिशील भाषाओं में, उन सभी का एक बूलियन संदर्भ में मूल्य है , जो (PHP में) है False
।
यदि आप इसका ==
परीक्षण करते हैं, तो यह बूलियन मूल्य का परीक्षण कर रहा है, इसलिए आपको समानता मिलेगी। यदि आप इसके साथ परीक्षण करते हैं ===
, तो यह प्रकार का परीक्षण करेगा, और आपको असमानता मिलेगी।
खैर, strrpos()
समारोह को देखो । यह गलत पाया जाता है अगर इसे कुछ नहीं मिला, लेकिन 0 अगर यह स्ट्रिंग की शुरुआत में कुछ पाया है!
<?php
// pitfall :
if (strrpos("Hello World", "Hello")) {
// never exectuted
}
// smart move :
if (strrpos("Hello World", "Hello") !== False) {
// that works !
}
?>
और हां, यदि आप राज्यों से निपटते हैं:
आप DebugMode = False
(सेट-ऑफ), DebugMode = True
(सेट पर) और DebugMode = Null
(बिल्कुल सेट नहीं ) के बीच अंतर करना चाहते हैं , हार्ड डिबगिंग के लिए नेतृत्व करेंगे ;-))।
null
है null
। false
है false
। दुखद लेकिन सत्य।
PHP में ज्यादा स्थिरता नहीं है। डेवलपर्स की कोशिश है कि अशक्त बनाने का अर्थ "अनकाउन्ट" या "गैर-मौजूद" है। लेकिन अक्सर फाल्स 'गैर-मौजूद' (उदाहरण के लिए स्ट्रैप्स ('असफल', 'खोज') के रूप में काम करेगा और गलत नहीं होगा)
जब आप पहले से ही किसी चीज के लिए झूठे प्रयोग कर रहे होते हैं, तो आप अक्सर अशक्त दिखाई देंगे। उदाहरण के लिए filter_input ()। यदि चर फ़िल्टर को विफल करता है तो वे झूठे वापस आ जाते हैं। और अशक्त है अगर चर मौजूद नहीं है (इसका मतलब यह नहीं है कि यह फिल्टर में भी विफल हो गया है? तो क्यों अशक्त भी लौटा?)
php के फंक्शन्स में डाटा वापस करने की सुविधा है। और डेवलपर्स के आंकड़ों के बजाय सभी तरह की विफलता की स्थिति में रोना।
और विफलता (गलत, अशक्त) से डेटा (int, str, आदि) का पता लगाने के लिए PHP में कोई समझदार तरीका नहीं है
आप बहुत अधिक हमेशा समारोह के आधार पर === अशक्त या === झूठे के लिए परीक्षण करने के लिए है। या दोनों के लिए, ऐसे मामलों में जैसे कि filter_input () / filter_var ()
और यहां कुछ प्रकार की बाजीगरी के साथ मज़ा है। सरणियों और वस्तुओं को भी शामिल नहीं किया।
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)
var_dump( null == 0 );
।
0 == null
और null == []
, लेकिन [] != 0
!!
strrpos('fail', 'search') will return false, and not null
मेरी राय में सही है - अगर null
अज्ञात का मतलब है तो strrpos
वापस लौटना null
ऐसा होगा जैसे कि 'मुझे पता नहीं है कि क्या स्ट्रिंग है' के बजाय 'स्ट्रिंग नहीं है'।
नीचे एक उदाहरण है:
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 में टाइप की तुलना के अधिक संदर्भ के लिए देखें । यह आपको एक स्पष्ट समझ देनी चाहिए।
PHP में आप === और! == ऑपरेटरों का उपयोग कर सकते हैं कि वे न केवल जाँच करें कि मान बराबर हैं, बल्कि यदि उनके प्रकार मेल खाते हैं। इसलिए उदाहरण के लिए: 0 == false
है true
, लेकिन 0 === false
है false
। !=
बनाम के लिए एक ही जाता है !==
। इसके अलावा अगर आप तुलना करते हैंnull
उल्लेखित संचालकों का उपयोग करते हुए अन्य दो से करते हैं, तो समान परिणाम की अपेक्षा करते हैं।
अब PHP में मूल्यों की यह गुणवत्ता आमतौर पर एक मूल्य वापस करते समय उपयोग की जाती है जो कभी-कभी 0
(शून्य) हो सकती है, लेकिन कभी-कभी यह हो सकता है कि फ़ंक्शन विफल हो गया। PHP में ऐसे मामलों में आप लौटते हैं false
और आपको पहचान ऑपरेटर का उपयोग करके इन मामलों की जांच करनी होती है ===
। उदाहरण के लिए यदि आप दूसरे के अंदर एक स्ट्रिंग की स्थिति की खोज कर रहे हैं और आप उपयोग कर रहे हैं strpos()
, तो यह फ़ंक्शन सांख्यिक स्थिति को लौटा देगा जो 0 हो सकता है यदि स्ट्रिंग बहुत शुरुआत में पाया जाता है, लेकिन यदि स्ट्रिंग नहीं मिली है सभी, फिर strpos()
वापस आ जाएंगे false
और आपको परिणाम से निपटने के दौरान इसे ध्यान में रखना होगा।
यदि आप अपने कार्यों में एक ही तकनीक का उपयोग करेंगे, तो मानक PHP लाइब्रेरी से परिचित कोई भी समझ जाएगा कि क्या चल रहा है और कैसे जांचना है कि लौटाया गया मान क्या है या प्रसंस्करण के दौरान कुछ त्रुटि हुई। वही वास्तव में फ़ंक्शन परम के लिए जाता है, आप उन्हें अलग-अलग तरीके से संसाधित कर सकते हैं यदि वे सरणियाँ या तार हैं या क्या नहीं, और इस तकनीक का उपयोग पीएचपी भर में भी किया जाता है, इसलिए हर कोई इसे आसानी से प्राप्त करेगा। तो मुझे लगता है कि यही शक्ति है।
मिथ्या, अशक्त, कुछ नहीं, ०, अपरिभाषित , आदि, आदि।
इनमें से प्रत्येक के विशिष्ट अर्थ हैं जो वास्तविक अवधारणाओं से संबंधित हैं। कभी-कभी एक कीवर्ड या मान में कई अर्थ ओवरलोडेड होते हैं।
में सी और सी ++ , NULL
, False
और 0
एक ही मूल्य के लिए अतिभारित रहे हैं। में सी # वे 3 अलग अवधारणाओं रहे हैं।
null
या NULL
आमतौर पर मूल्य की कमी को इंगित करता है, लेकिन आमतौर पर यह निर्दिष्ट नहीं करता है कि क्यों।
0
प्राकृतिक संख्या शून्य को इंगित करता है और 1, 2, 3, आदि के लिए प्रकार-समतुल्य है और भाषाओं में जो अलग-अलग अवधारणाओं का समर्थन करते NULL
हैं उन्हें केवल एक संख्या माना जाना चाहिए।
असत्य असत्य को इंगित करता है। और यह द्विआधारी मूल्यों में उपयोग किया जाता है । इसका कोई मतलब नहीं है, न ही इसका मतलब है 0
। यह बस दो द्विआधारी मूल्यों में से एक को इंगित करता है।
कुछ भी संकेत नहीं दे सकता है कि मूल्य विशेष रूप से कुछ भी नहीं होने के लिए निर्धारित है जो शून्य के रूप में एक ही चीज़ को इंगित करता है, लेकिन इरादे से।
कुछ भाषाओं में अनिर्धारित यह इंगित करता है कि मूल्य अभी तक निर्धारित किया गया है क्योंकि किसी भी कोड ने वास्तविक मूल्य निर्दिष्ट नहीं किया है।
मैं सिर्फ 1/2 एक दिन या तो एक होने की कोशिश व्यर्थ है 0
, null
, false
से वापस जाने के लिए strops
!
यहाँ सब मैं करने की कोशिश कर रहा था, इससे पहले कि मैंने पाया कि तर्क सही दिशा में नहीं बह रहा था, ऐसा लगता है कि php कोडिंग में एक ब्लैकहोल था:
संकल्पना एक सर्वर पर होस्ट किया गया डोमेन नाम लेते हैं, और सुनिश्चित करें कि यह रूट स्तर नहीं है, ऐसा करने के लिए कई अलग-अलग तरीके ठीक हैं, लेकिन मैंने अन्य php फ़ंक्शन / निर्माण के कारण अलग-अलग चुना है जो मैंने किया है।
वैसे भी यहाँ का आधार था:
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";
}
}
अंत में इस विषय को पढ़ने के बाद, मैंने पाया कि यह काम किया !!!
{
if ((mydomain.co.uk, mydomain)) !== false )
{
echo "\n5 is True";
} else {
echo "\n5 is False";
}
}
इस लेख के लिए धन्यवाद, अब मैं समझता हूं कि भले ही यह क्रिसमस हो, यह क्रिसमस नहीं हो सकता है false
, क्योंकि इसका NULL
दिन भी हो सकता है !
कुछ सरल कोड को डीबग करने के एक दिन को बर्बाद करने के बाद, काश मुझे पहले से यह पता होता, क्योंकि मैं इस समस्या को पहचानने में सक्षम होता, बजाय इसके कि यह काम करने की कोशिश कर रहा था। यह काम नहीं किया, के रूप में False
, NULL
और 0
सभी समान नहीं हैंTrue or False or NULL
?
मूल्य को बूलियन में स्पष्ट रूप से परिवर्तित करने के लिए, (बूल) या (बूलियन) कास्ट का उपयोग करें।
हालांकि, ज्यादातर मामलों में कलाकार अनावश्यक है, क्योंकि अगर ऑपरेटर, फ़ंक्शन या नियंत्रण संरचना को बूलियन तर्क की आवश्यकता होती है तो एक मूल्य स्वचालित रूप से परिवर्तित हो जाएगा।
बूलियन में परिवर्तित करते समय, निम्नलिखित मूल्यों को FALSE माना जाता है:
FALSE
ही 0.0
(शून्य) "0"
NULL
(परेशान चर सहित) TRUE
(किसी भी संसाधन सहित) माना जाता है । इसलिए, ज्यादातर मामलों में, यह समान है।
दूसरी ओर, ===
और ==
एक ही बात नहीं कर रहे हैं। नियमित रूप से, आपको बस "बराबर" ऑपरेटर की आवश्यकता है। स्पष्टीकरण देना:
$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.
अधिक जानकारी के लिए, PHP ऑनलाइन डॉक्स में " तुलना ऑपरेटर " पृष्ठ देखें।
उम्मीद है की यह मदद करेगा।
इन मूल्यों के बीच के अंतर हमेशा विस्तृत भाषा-विशिष्ट नियमों के लिए आते हैं। पीएचपी के लिए जो आप सीखते हैं, वह जरूरी नहीं है कि पायथन, या पर्ल, या सी, आदि के लिए सही है, जबकि आप जिस भाषा के साथ काम कर रहे हैं, उसके लिए नियम सीखना मूल्यवान है, उन पर भरोसा करना बहुत परेशानी की बात है। । मुसीबत तब आती है जब अगले प्रोग्रामर को आपके कोड को बनाए रखने की आवश्यकता होती है और आपने कुछ ऐसे निर्माण का उपयोग किया है जो Null बनाम False (उदाहरण के लिए) के कुछ छोटे विवरणों का लाभ उठाता है। आपका कोड सही दिखना चाहिए (और इसके विपरीत, गलत कोड गलत दिखना चाहिए )।
"कोई रिकॉर्ड नहीं" या "कोई जानकारी नहीं" का प्रतिनिधित्व करने के लिए डेटाबेस में नल का उपयोग किया जाता है। तो आपके पास एक छोटा सा क्षेत्र हो सकता है जो यह वर्णन करता है कि "क्या यह उपयोगकर्ता हमारे द्वारा ई-मेल भेजा जाना चाहता है", जहां ट्रू का अर्थ है कि वे करते हैं, गलत का अर्थ है कि वे कुछ भी नहीं भेजना चाहते हैं, लेकिन अशक्त का मतलब यह होगा कि आप डॉन ' पता नहीं वे बाहरी जोड़ों और इस तरह के बारे में आ सकते हैं।
नल के तार्किक निहितार्थ अक्सर भिन्न होते हैं - कुछ भाषाओं में NULL कुछ भी समान नहीं है, इसलिए यदि (a == NULL) हमेशा गलत होगा।
इसलिए व्यक्तिगत रूप से मैं हमेशा FALSE के लिए एक बूलियन को इनिशियलाइज़ करूँगा, और NULL को इनिशियलाइज़ करना थोड़ा icky लगेगा (यहाँ तक कि C में भी जहाँ दोनों सिर्फ 0 हैं ... बस एक स्टाइल चीज़ है)।
मुझे लगता है कि बुरे डेवलपर्स को वहाँ कोड में null / 0 / false के सभी अलग-अलग उपयोग मिलते हैं।
उदाहरण के लिए, सबसे आम गलतियों में से एक डेवलपर्स जो एक फ़ंक्शन के साथ डेटा के रूप में त्रुटि कोड वापस करना है।
// On error GetChar returns -1
int GetChar()
यह एक चीनी इंटरफेस का एक उदाहरण है। यह "सॉफ्टवेयर डेवलपमेंट प्रॉब्यूटिंग डीबगिंग" पुस्तक में और दूसरी पुस्तक "राइट कोड राइटिंग" में भी दर्शाया गया है।
इसके साथ समस्या, चार प्रकार पर किए गए निहितार्थ या धारणाएं हैं। कुछ संकलक पर चार प्रकार के गैर-हस्ताक्षर किए जा सकते हैं। तो भले ही आप -1 लौटा दें लेकिन कंपाइलर इसके बजाय 1 वापस कर सकता है। C ++ या C में इस प्रकार की संकलक धारणाएँ कठिन हैं।
इसके बजाय, सबसे अच्छा तरीका है कि आप अपने डेटा के साथ त्रुटि कोड को न मिलाएं। तो निम्नलिखित समारोह।
char GetChar()
अब बन जाता है
// On success return 1
// on failure return 0
bool GetChar(int &char)
इसका मतलब यह है कि डेवलपर आपकी विकास की दुकान में कितना युवा है, उसे कभी भी यह गलत नहीं मिलेगा। हालांकि यह कोड में अतिरेक या निर्भरता के बारे में बात नहीं कर रहा है।
इसलिए सामान्य तौर पर, भाषा में प्रथम श्रेणी के प्रकार के रूप में स्वैप करना ठीक है और मुझे लगता है कि जॉएल ने अपने हालिया पोस्टकास्ट के साथ इसके बारे में बात की थी। लेकिन कोशिश करें कि अपने रूटीन में अपने डेटा के साथ मिक्स एंड मैच बूल का इस्तेमाल न करें और आप पूरी तरह से ठीक रहें।
PHP में यह निर्भर करता है कि क्या आप प्रकारों को मान्य कर रहे हैं:
(
( false !== 0 ) && ( false !== -1 ) && ( false == 0 ) && ( false == -1 ) &&
( false !== null ) && ( false == null )
)
तकनीकी रूप से अशक्त है, 0x00
लेकिन PHP में है ( null == 0x00 ) && ( null !== 0x00 )
।
0
पूर्णांक मान है।
NULL
PHP के बारे में एक दिलचस्प तथ्य : यदि आप NULL
इसके बराबर एक संस्करण सेट करते हैं , तो यह उसी तरह है जैसे आपने बुलाया थाunset()
पर किया था।
NULL
अनिवार्य रूप से इसका मतलब है कि एक चर का कोई मूल्य नहीं है; false
एक वैध बूलियन मान है, 0
एक मान्य पूर्णांक मान है, और PHP के बीच कुछ काफी बदसूरत रूपांतरण प्राप्त होते हैं 0
, "0"
, ""
, और false
।
नल कुछ भी नहीं है, झूठा थोड़ा है, और 0 है (शायद) 32 बिट्स।
PHP विशेषज्ञ नहीं, लेकिन कुछ और आधुनिक भाषाओं में जो विनिमेय नहीं हैं। मुझे एक प्रकार की याद आती है कि 0 और असत्य विनिमय योग्य हैं, लेकिन बूलियन एक वास्तविक प्रकार होने के साथ आपके पास इससे जुड़े तरीके और वस्तुएं हो सकती हैं, इसलिए यह सिर्फ एक व्यापार है। अशक्त हालांकि, अनिवार्य रूप से कुछ भी नहीं की अशक्त है।
खैर, मैं अपने PHP दिनों से "===" भाग का जवाब देने के लिए पर्याप्त याद नहीं कर सकता, लेकिन अधिकांश सी-शैली भाषाओं के लिए, NULL को पॉइंटर मानों के संदर्भ में, बूलियन के रूप में गलत और शून्य के रूप में उपयोग किया जाना चाहिए संख्यात्मक मान जैसे कोई int। '\ 0' एक चरित्र संदर्भ के लिए प्रथागत मूल्य है। मैं आमतौर पर फ्लोट और डबल्स के लिए 0.0 का उपयोग करना पसंद करता हूं।
तो .. त्वरित उत्तर है: संदर्भ।
बहुत सारी आधुनिक भाषाओं में, तार्किक रूप से शून्य रूप से इंगितकर्ताओं (या संदर्भों) का अर्थ है जिनका मूल्य नहीं है, या एक चर जो आरंभिक नहीं है। 0 शून्य का पूर्णांक मान है, और गलत का बूलियन मान है, ठीक है, गलत है। सी में चीजों को जटिल बनाने के लिए, उदाहरण के लिए, अशक्त, 0, और असत्य सभी को ठीक उसी तरह दर्शाया गया है। मुझे नहीं पता कि यह PHP में कैसे काम करता है।
फिर, चीजों को और अधिक जटिल करने के लिए, डेटाबेस में अशक्त की अवधारणा होती है, जिसका अर्थ है गायब या लागू नहीं होना, और अधिकांश भाषाओं में उनके नल के लिए DBNull को मैप करने का एक सीधा तरीका नहीं है। हाल तक, उदाहरण के लिए, एक अंतर शून्य होने और शून्य होने के बीच कोई अंतर नहीं था, लेकिन यह अशक्त ints के साथ बदल दिया गया था।
इस ध्वनि को जटिल बनाने के लिए क्षमा करें। यह सिर्फ इतना है कि यह वर्षों से भाषाओं में एक कठोर छड़ी बिंदु रहा है, और हाल तक तक, इसका कहीं भी कोई स्पष्ट समाधान नहीं हुआ है। लोग केवल चीजों को एक साथ जोड़ने या खाली करने या डेटाबेस में नल का प्रतिनिधित्व करते थे, जो हमेशा बहुत अच्छी तरह से काम नहीं करता है।
झूठा और 0 वैचारिक रूप से समान हैं, अर्थात वे आइसोमॉर्फिक हैं। 0 प्राकृतिक संख्याओं के बीजगणित के लिए प्रारंभिक मूल्य है, और झूठी बूलियन बीजगणित के लिए प्रारंभिक मूल्य है।
दूसरे शब्दों में, 0 को उस संख्या के रूप में परिभाषित किया जा सकता है, जब किसी प्राकृतिक संख्या में जोड़ा जाता है, उसी संख्या को उत्पन्न करता है:
x + 0 = x
इसी तरह, गलत एक ऐसा मूल्य है जो इसका एक विघटन है और कोई अन्य मूल्य समान मूल्य है:
x || False = x
नल वैचारिक रूप से कुछ बिल्कुल अलग है। भाषा के आधार पर, इसके लिए अलग-अलग शब्दार्थ हैं, लेकिन उनमें से कोई भी "प्रारंभिक मूल्य" का वर्णन नहीं करता है जैसा कि गलत और 0 हैं। नल के लिए कोई बीजगणित नहीं है। यह चर से संबंधित है, आमतौर पर यह निरूपित करने के लिए कि चर का वर्तमान संदर्भ में कोई विशिष्ट मूल्य नहीं है। अधिकांश भाषाओं में, Null पर कोई भी ऑपरेशन परिभाषित नहीं हैं, और यह Null को ऑपरेंड के रूप में उपयोग करने के लिए एक त्रुटि है। कुछ भाषाओं में, "नल" के बजाय "नीचे" नामक एक विशेष मूल्य है, जो एक गणना के मूल्य के लिए एक प्लेसहोल्डर है जो समाप्त नहीं करता है।
मैंने NULL के निहितार्थ के बारे में और अधिक विस्तार से लिखा है।
कोई मुझे समझा सकता है कि तुलनात्मक उदाहरण में 'NULL' सिर्फ एक स्ट्रिंग क्यों नहीं है?
$x = 0;
var_dump($x == 'NULL'); # TRUE !!!WTF!!!
php > var_dump((int) "NULL"); // => int(0)
php > var_dump((int) "BLA"); // => int(0)
php.net/manual/en/language.operators.comparison.php संख्याओं, सामान्य गणित में तार और संसाधनों का अनुवाद करें
फ़ॉसीनेस के मुद्दे PHP इतिहास से आते हैं। समस्या अच्छी तरह से परिभाषित स्केलर प्रकार को लक्षित नहीं करती है।
'*' == true -> true (string match)
'*' === true -> false (numberic match)
(int)'*' == true -> false
(string)'*' == true -> true
PHP7 सख्ती एक कदम आगे है, लेकिन शायद पर्याप्त नहीं है। https://web-techno.net/typing-with-php-7-what-you-shouldnt-do/
null
और क्या उपयोग कर रहे हैंfalse
। मैं का उपयोग करना पसंदnull
है जब एक विधि से एक मूल्य को वापस लाने, क्योंकि मैं उपयोग कर सकते हैंisset
निर्धारित करने के लिए एक मूल्य के बजाय का उपयोग करने का लौटाया जाए याempty
जो खाते में नहीं ले जाएगा:false
,0
,'0'
या एक खाली स्ट्रिंग, कई स्थितियों में व्यवहार्य मूल्यों हो सकता है। मेरे लिए यह एक गन्दा निर्माण में सबसे साफ समाधान है।