PHP 7 স্কেলার টাইপ ডিক্লেরেশন এবং রিটার্ন টাইপ ডিক্লেরেশনে দুটি টাইপ হিন্টিং ব্যবহার করে −
- Weak type hinting
- Strict type hinting
Weak type hinting
ডিফল্টভাবে, PHP 7 weak type checking মোডে কাজ করে। Weak type checking কোনো এরর বা ফেটাল এরর দেয় না। টাইপ ডিক্লেরেশন মিসম্যাচ হলে এটি কোনো এরর থ্রো না করে কোড এক্সিকিউট করে।
strict_types declare() ব্যবহার করে, আমরা weak type checking কন্ট্রোল করতে পারি।
declare(strict_types=0); //weak type-checking; আমাদের strict value = 0 সেট করতে হবে
Weak type hinting উদাহরণ ১
<?php $x=10; // ইন্টিজার ভেরিয়েবল x =10 মান $y=20.20; // ফ্লোটিং পয়েন্ট নাম্বার y=20.20 মান ব্যবহার function add(int $x, int $y){ return $x + $y; } echo add($x, $y); ?>আউটপুট
কোড নিচের আউটপুট প্রডিউস করবে −
30
ব্যাখ্যা
উপরের উদাহরণে, আমরা প্যারামিটারের জন্য strict value ব্যবহার করছি না। আমরা দুটি ইন্টিজার ভেরিয়েবল x, এবং y ব্যবহার করেছি। x=10 এবং y ফ্লোটিং নাম্বার 20.20 ব্যবহার করছে, কিন্তু y কোনো এরর প্রডিউস করবে না; এটি সাদা আউটপুট ইন্টিজার মান 30 দেবে।
উদাহরণ ২
<?php function returnadd(int ...$integers){ return array_sum($integers); } var_dump(returnadd(2, '3', 4.1)); ?>আউটপুট
উপরোক্ত প্রোগ্রামের আউটপুট হবে −
int(9)
Strict type hinting
Strict type hinting টাইপ ডিক্লেরেশন মিসম্যাচ হলে Fatal Error দেবে। আমরা বলতে পারি strict type hinting টাইপ ডিক্লেরেশনের সঠিক টাইপের ভেরিয়েবল গ্রহণ করে, অন্যথায় TypeError mismatch থ্রো করবে।
Strict type hinting-এ, একটি ফাইলের প্রথম স্টেটমেন্ট অবশ্যই declare (strict_types=1) ঘোষণা করতে হবে, অন্যথায় এটি কম্পাইলার এরর প্রডিউস করবে। এটি অন্যান্য ইনক্লুডেড ফাইলকে প্রভাবিত করে না যেগুলো ফাইলে স্পেসিফাইড নয়, অর্থাৎ এটি শুধু স্পেসিফিক ফাইলকে প্রভাবিত করে যেখানে এটি ব্যবহার করা হয়।
Strict type hinting ডাইরেক্টিভ সম্পূর্ণরূপে কম্পাইল-টাইম এবং রানটাইমে কন্ট্রোল করা যাবে না।
Strict type hinting উদাহরণ ১
<?php declare (strict_types=1); function returnadd(float $x , float $y){ return $x+$y; } var_dump(returnadd(3.1,2.1)); //আউটপুট float(5.2) var_dump(returnadd(3, "2 days")); //ফেটাল এরর ?>আউটপুট
উপরোক্ত strict type hinting প্রোগ্রাম হবে −
float(5.2) Fatal error: Uncaught TypeError: Argument 2 passed to returnadd() must be of the type float, string given, called in C:\xampp\htdocs\gud.php on line 7 and defined in C:\xampp\htdocs\gud.php:3 Stack trace: #0 C:\xampp\htdocs\gud.php(7): returnadd(3, '2 days') #1 {main} thrown in C:\xampp\htdocs\gud.php on line 3Strict type hinting উদাহরণ ২
<?php declare(strict_types=1); // strict mode checking $x='1'; // স্ট্রিং $y=20; //ইন্টিজার নাম্বার function add(int $x, int $y){ return $x + $y; } var_dump(add($x, $y)); ?>এটি আউটপুট প্রডিউস করবে “fatal error”
উপরের strict type declaration উদাহরণে, যদি আমরা strict_type value 1 ডিক্লেয়ার করি, কোড আউটপুট দেবে “Fatal error: Uncaught TypeError: Argument 1 passed to add() must be of the type int, a string is given”।