मैं जवाबों के माध्यम से पढ़ रहा हूं और किसी को भी PHP के नंबर रूपांतरण में सबसे बड़ी चेतावनी का उल्लेख नहीं करता।
सबसे उत्कीर्ण उत्तर निम्नलिखित करने का सुझाव देता है:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
ये तो बहुत खूब है। PHP डायरेक्ट कास्टिंग करती है। लेकिन अगर हमने निम्नलिखित किया हो तो क्या होगा?
$str = "3.14is_trash"
$intstr = (int)$str
क्या PHP ऐसे रूपांतरणों को वैध मानता है?
जाहिरा तौर पर हाँ ।
PHP स्ट्रिंग को तब तक पढ़ता है जब तक उसे आवश्यक प्रकार के लिए पहला गैर-संख्यात्मक चरित्र नहीं मिल जाता है। मतलब है कि पूर्णांक के लिए, संख्यात्मक वर्ण हैं [0-9]। परिणामस्वरूप, यह पढ़ता है 3
, क्योंकि यह [0-9] वर्ण श्रेणी में है, यह पढ़ना जारी रखता है। पुस्तकें.
और वहाँ रुक जाता है क्योंकि यह [0-9] रेंज में नहीं है।
यदि आप फ्लोट या डबल करने के लिए कास्ट किए जाते हैं तो भी यही होगा। पीएचपी पढ़ता था 3
, तो .
, तो 1
, फिर 4
, और कम से बंद कर देंगेi
जब तक कि यह वैध फ्लोट न्यूमेरिक कैरेक्टर न हो।
परिणामस्वरूप, "million" >= 1000000
झूठ का मूल्यांकन करता है, लेकिन "1000000million" >= 1000000
मूल्यांकन करता हैtrue
।
यह सभी देखें:
https://www.php.net/manual/en/language.operators.comparison.php तुलना करने पर कैसे रूपांतरण होते हैं
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion कैसे स्ट्रिंग्स को संबंधित संख्याओं में परिवर्तित किया जाता है।