से ट्रीहाउस ब्लॉग :
PHP 7 के साथ हमने अब स्केलर प्रकार जोड़े हैं। विशेष रूप से: इंट, फ्लोट, स्ट्रिंग और बूल।
स्केलर प्रकार के संकेत जोड़ने और सख्त आवश्यकताओं को सक्षम करने से, यह आशा की जाती है कि अधिक सही और स्व-दस्तावेजीकरण PHP प्रोग्राम लिखे जा सकते हैं। यह आपको अपने कोड पर अधिक नियंत्रण भी देता है और कोड को पढ़ना आसान बना सकता है।
डिफ़ॉल्ट रूप से, स्केलर प्रकार-घोषणाएं गैर-सख्त हैं, जिसका अर्थ है कि वे मूल प्रकार को बदलने के लिए प्रकार-घोषणा द्वारा निर्दिष्ट प्रकार से मिलान करने का प्रयास करेंगे। दूसरे शब्दों में, यदि आप एक स्ट्रिंग को पास करते हैं जो एक फ़ंक्शन में संख्या के साथ शुरू होती है जिसे फ्लोट की आवश्यकता होती है, तो यह शुरुआत से संख्या को पकड़ लेगा और बाकी सब कुछ हटा देगा। एक फ्लोट को एक फ़ंक्शन में पास करना जिसमें एक इंट की आवश्यकता होती है वह इंट (1) बन जाएगा।
यदि संभव हो तो डिफ़ॉल्ट रूप से, PHP गलत प्रकार के मानों को अपेक्षित स्केलर प्रकार में डालेगा। उदाहरण के लिए, एक फ़ंक्शन जिसे एक स्ट्रिंग की अपेक्षा एक पैरामीटर के लिए पूर्णांक दिया जाता है, उसे टाइप स्ट्रिंग का एक चर मिलेगा।
सख्त प्रकार अक्षम ( निष्कासित ):
<?php
function AddIntAndFloat(int $a, float $b) : int
{
return $a + $b;
}
echo AddIntAndFloat(1.4, '2');
/*
* without strict typing, PHP will change float(1.4) to int(1)
* and string('2') to float(2.0) and returns int(3)
*/
प्रति फ़ाइल के आधार पर सख्त मोड को सक्षम करना संभव है। सख्त मोड में, केवल सटीक प्रकार की घोषणा के एक चर को स्वीकार किया जाएगा, या एक टाइपर फेंका जाएगा। इस नियम का एकमात्र अपवाद यह है कि एक पूर्णांक एक फ़ंक्शन को दिया जा सकता है जो फ्लोट की अपेक्षा करता है। आंतरिक कार्यों के भीतर से फ़ंक्शन कॉल सख्त_टाइप्स घोषणा से प्रभावित नहीं होंगे।
सख्त मोड को सक्षम करने के लिए, डिक्लेयर स्टेटमेंट का उपयोग सख्त_टाइप्स घोषणा के साथ किया जाता है:
सख्त प्रकार (सक्षम eval ):
<?php declare(strict_types=1);
function AddIntAndFloat(int $a, float $b): int
{
return (string) $a + $b;
}
echo AddIntAndFloat(1.4,'2');
// Fatal error: Uncaught TypeError: Argument 1 passed to AddIntAndFloat() must be of the type int, float given
echo AddIntAndFloat(1,'2');
// Fatal error: Uncaught TypeError: Argument 2 passed to AddIntAndFloat() must be of the type float, string given
// Integers can be passed as float-points :
echo AddIntAndFloat(1,1);
// Fatal error: Uncaught TypeError: Return value of AddIntAndFloat() must be of the type integer, string returned
काम करने का उदाहरण:
<?php
declare(strict_types=1);
function AddFloats(float $a, float $b) : float
{
return $a+$b;
}
$float = AddFloats(1.5,2.0); // Returns 3.5
function AddFloatsReturnInt(float $a, float $b) : int
{
return (int) $a+$b;
}
$int = AddFloatsReturnInt($float,1.5); // Returns 5
function Say(string $message): void // As in PHP 7.2
{
echo $message;
}
Say('Hello, World!'); // Prints "Hello, World!"
function ArrayToStdClass(array $array): stdClass
{
return (object) $array;
}
$object = ArrayToStdClass(['name' => 'azjezz','age' => 100]); // returns an stdClass
function StdClassToArray(stdClass $object): array
{
return (array) $object;
}
$array = StdClassToArray($object); // Returns array
function ArrayToObject(array $array): object // As of PHP 7.2
{
return new ArrayObject($array);
}
function ObjectToArray(ArrayObject $object): array
{
return $object->getArrayCopy();
}
var_dump( ObjectToArray( ArrayToObject( [1 => 'a' ] ) ) ); // array(1 => 'a');