मैनुअल से PHP type comparison tables देखें। जब तक आप इसे आंतरिककृत नहीं कर लेते हैं, तब तक यह वास्तव में आसान काम है और यह समझने के लिए अमूल्य रहा है कि वास्तव में क्या मूल्यांकन किया जाएगा और कब।
अन्य लोगों ने पहले से ही प्रश्न के मूल का उत्तर दिया है, लेकिन मुझे लगता है कि यह कहना महत्वपूर्ण है कि PHP में, एकमात्र गैर-खाली स्ट्रिंग जो == ऑपरेटर के साथ "सत्य" का मूल्यांकन नहीं करती है, PHP के रूप में "0" है किसी भी स्ट्रिंग का इलाज केवल एक संख्या या पूर्णांक के रूप में होता है।
इसके लिए तर्क यह है कि PHP काफी कम टाइप किया गया है और पूर्णांक, स्ट्रिंग्स, फ्लोट्स और बूलियन मानों को अदला-बदली करने की अनुमति देता है। इसका एक असली दुनिया और बेहद आम उदाहरण यह है कि यदि आप MySQL या PDO फ़ंक्शंस का उपयोग कर रहे हैं, तो सब कुछ के लिए स्ट्रिंग लौटा दी जाती है, भले ही अंतर्निहित कॉलम एक पूर्णांक हो।
CREATE TABLE `test`.`pants` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`some_other_int` INT NOT NULL
) ENGINE = InnoDB;
INSERT INTO `test`.`pants` (`id`, `some_other_int`)
VALUES ('1', '1'), ('2', '0');
और निम्नलिखित कोड:
निम्नलिखित एसक्यूएल पर विचार करें! "क्षेत्र एक्स एक स्ट्रिंग नहीं था"
<?php
$c = mysql_connect('127.0.0.1', 'user', 'password');
mysql_select_db('test', $c);
$r = mysql_query('SELECT * FROM pants', $c);
while ($row = mysql_fetch_assoc($r)) {
var_dump($row);
foreach($row as $k=>$v) {
if (!is_string($v))
echo "field {$v} was not a string!\n";
}
}
संदेश कभी मुद्रित नहीं है, भले ही डेटाबेस में प्रत्येक कॉलम एक पूर्णांक है। मान लीजिए कि आप वास्तव में उस तालिका में दूसरी पंक्ति का उपयोग करना चाहते हैं।
<?php
$id = 2;
$r = mysql_query(sprintf('SELECT * FROM pants WHERE id=%s', mysql_real_esacpe_string($id)), $c);
$row = mysql_fetch_assoc($r);
// this is the important bit
if (0 == $row['some_other_int']) {
echo "It was zero!";
}
स्ट्रिंग "0" की तुलना के लिए पूर्णांक 0 के रूप में इलाज नहीं किया गया, इसके बाद के संस्करण कोड प्रिंट होगा कभी नहीं "यह शून्य था!"। प्रोग्रामर को डेटाबेस से बाहर आने वाले मान के प्रकार को जॉगलिंग करने की ज़िम्मेदारी लेनी होगी। यह एक ढीली टाइप की गई भाषा के लिए वांछनीय नहीं है।
प्रकार सहित सख्त समानता "वास्तव में, वास्तव में, ईमानदार ईश्वर के बराबर ईमानदार" ऑपरेटर का उपयोग करके परीक्षण किया जाता है, जिसे प्रतीक "===" द्वारा दर्शाया जाता है।
बस जावास्क्रिप्ट की तरह, विभिन्न प्रकारों के बीच तुलना संक्रमणशील नहीं हो सकती है। वह प्रकार जबरदस्ती का डरावना है। – JAL