मैं PHP 7.0.11 में वास्तव में एक दिलचस्प बग आया हूं जहां declare(strict_types=1);
सक्षम array_map()
और array_walk()
सख्त टाइपिंगटिंग के बारे में जागरूक नहीं है। मैंने कहीं पढ़ा है कि सख्त प्रकारों को सक्षम करने से PHP भी मूल कार्यों में सख्त टाइपिंगिंग का उपयोग करता है, लेकिन ऐसा नहीं है। इस उदाहरण कोड में देखो, यह लेखन त्रुटि अपवाद फेंक देना चाहिए:सख्त प्रकार संकेत सक्षम होने के साथ, array_map किसी भी प्रकार को परिवर्तित करता है
declare(strict_types=1);
$myArray = [12, 'string value', 'another string value', 5];
array_map('validateMyArrayValues', $myArray);
function validateMyArrayValues(string $item)
{
var_dump($item);
}
var_dump
परिणाम है:
test.php:13:
string(2) "12"
test.php:13:
string(12) "string value"
test.php:13:
string(20) "another string value"
test.php:13:
string(1) "5"
सभी पूर्णांक मूल्यों स्ट्रिंग जो स्पष्ट रूप से एक मुद्दा है में typecasted कर रहे हैं। इससे सवाल उठता है कि क्या मैं declare(strict_types=1);
सभी को एक साथ छोड़ सकता हूं और is_*
फ़ंक्शंस का उपयोग कर सकता हूं और अपवाद फेंक सकता हूं?
यदि आप * सख्त * प्रकार चाहते हैं, तो php का उपयोग न करें। इसके * फायदे * में से एक है इसके ढीले प्रकार –
@ raina77ow हाँ, हाँ यह थोडा अजीब भरोसा है। Int के साथ आश्चर्यजनक रूप से यह ठीक से काम करता है। असल में मैं वास्तव में खुश हूं अगर कोई भी PHP dev समूह को बग रिपोर्ट पोस्ट कर सकता है क्योंकि PHP 7.1 भी प्रभावित है; और मैं उचित बग रिपोर्ट लिखने में इतना अच्छा नहीं हूं। –
@ दागोन दाएं, लेकिन प्रत्येक प्रोग्रामिंग भाषा में इसकी ताकत और कमजोरियां होती हैं। –