PHP functions পর্ব-৩: Type hinting

PHP তে Type Hinting কি ?

PHP তে function call করা কালীন যেসব Parameter দিয়ে যেসব Argument গ্রহণ করব তার Data type এবং function থেকে যেসব value return করবো তার data type কি হবে, তা নির্ধারণ করার পদ্ধতিকে PHP তে Type Hinting বলে।

PHP তে Type Hinting কত প্রকার এবং কি কি ?

PHP তে Type Hinting দুই প্রকার :

  • Argument Type Hinting
  • Return Type Hinting

PHP তে Argument Type Hinting কি ?

PHP তে function call করা কালীন Parameter এর মাধ্যমে যেসব Argument গ্রহণ করব তার data type কি হবে, তা নির্ধারণ করার পদ্ধতিকে PHP তে Argument Type Hinting বলে।

PHP তে Type Hinting এর জন্য কি কি data type সাপোর্ট করে?

PHP 7.1 পর্যন্ত ৯ ধরনের data type সাপোর্ট করে :

  • Class/interface
  • self
  • array
  • callable
  • bool
  • float
  • int
  • string
  • iterable

PHP তে Argument Type Hinting কিভাবে কাজ করে?

PHP তে Argument Type Hinting কিভাবে কাজ করে তা বুঝার জন্য নিচের উদাহরণটি দেখে নেয়া যাক :

<?php
function TypeHint(int $a){
    var_dump($a);
}
 
TypeHint(5.5); //Output: (int)5
?>

ব্যাখ্যা : উপরের typeHint function এ আমরা $a parameter এর data type হিসেবে integer ঘোষণা করেছি , যার জন্য $a paramter টি আমাদের argument value 5.5 কে integer এ convert করে শুধু 5 return করবে। আর যেহেতু PHP একটা loosely type language তাই কোনো রকম error দেখাবেনা। তবে আমরা চাইলে declare function দিয়ে PHP কে run time strict type করে নিতে পারি। আর তখন PHP একটা fatal error দেখাবে। নিচের উদাহরণ দেখুন :

<?php
declare(strict_types=1);
function TypeHint(int $a){
    var_dump($a);
}
 
TypeHint(5.5);
?>

Output Error:

PHP typehint error

তবে যদি argument value 5.5 float number এর পরিবর্তে integer 5 পাঠান , তাহলে কোনো রকম error দেখাবেনা। নিচের উদাহরণ দেখুন :

<?php
declare(strict_types=1);
function TypeHint(int $a){
    var_dump($a);
}
 
TypeHint(5);
?>
int(5)

Type Hinting error handling এর জন্য PHP তে কোনো extension বা class আছে ?

হ্যাঁ Catching TypeError Exception class দিয়ে আরো সুন্দর করে error রেজাল্ট দেখাতে পারি। নিচের উদাহরণ দেখুন :

<?php
declare(strict_types=1);
function TypeHint(int $a){
    return $a;
}
 
try {
    var_dump(typeHint(5));
    echo "<br>";
    var_dump(typeHint(5.5));
} catch (TypeError $e) {
    echo 'Error: '.$e->getMessage();
}
?>

Result:

PHP array typeHint

ব্যাখ্যা :try block এর মধ্যে প্রথম typeHint function টি কাজ করবে, কারণ সেখানে আমরা function এর Parameter কে type hint হিসেবে array ঘোষণা করেছি , আর এর জন্য argument এর value ও array পাঠিয়েছি। আর try block এর মধ্যে দ্বিতীয় typeHint function টি কাজ করবেনাl কারণ সেখানে argument এর value পাঠিয়েছি interger.

এবার চলুন object দিয়ে type hinting এর একটা উদাহরণ দেখা যাক :

<?php
declare(strict_types=1);
class A{
    public $name="Mr. Khaled";
    public $email="khaled@mail.com";
    public $address="Dhaka,Bangladesh";
}
 
 
function TypeHint(A $a){
    return $a;
}
 
try {
    var_dump(typeHint(new A));
    echo "<br>";
    var_dump(typeHint("Hello World"));
} catch (TypeError $e) {
    echo 'Error: '.$e->getMessage();
}
?>

Result:

ব্যাখ্যা :try block এর মধ্যে প্রথম typeHint function টি কাজ করবে, কারণ সেখানে আমরা function এর Parameter কে type hint হিসেবে Object A ঘোষণা করেছি , আর এর জন্য argument এর value ও Object A পাঠিয়েছি। আর try block এর মধ্যে দ্বিতীয় typeHint function টি কাজ করবেনাl কারণ সেখানে argument এর value পাঠিয়েছি “String”

Zend Certified PHP Engineering (ZCPE) Course

http://w3programmers.com/bangla/zend-certified-php-engineering-zcpe-course/embed/#?secret=CLapfAuCdq

Return Type Hinting কি ?

PHP তে function call করা কালীন function থেকে যেসব value return করবে, তার data type কি হবে তা নির্ধারণ করার পদ্ধতিকে PHP তে Return Type Hinting বলে।

PHP তে Return Type Hinting কিভাবে কাজ করে?

PHP তে Return Type Hinting কিভাবে কাজ করে তা বুঝার জন্য নিচের উদাহরণটি দেখে নেয়া যাক :

<?php
function sum($a, $b): int {
    return $a + $b;
}
 
// Note that a float will be returned.
var_dump(sum(3, 2.5));  //Result: 5
?>

ব্যাখ্যা : উপরের sum function এ parenthesis এর পর return data type হিসেবে integer ঘোষণা করেছি , যার জন্য আমাদের return value 5.5 কে integer এ convert করে শুধু 5 return করবে। আর যেহেতু PHP একটা loosely type language তাই কোনো রকম error দেখাবেনা। তবে আমরা চাইলে declare function দিয়ে PHP কে run time strict type করে নিতে পারি। আর তখন PHP একটা fatal error দেখাবে। নিচের উদাহরণ দেখুন :

<?php
declare(strict_types=1);
function sum($a, $b): int {
    return $a + $b;
}
 
// Note that a float will be returned.
var_dump(sum(3, 2.5));
?>

তবে যদি return value 5.5 float number এর পরিবর্তে integer 5 হয় , তাহলে কোনো রকম error দেখাবেনা। নিচের উদাহরণ দেখুন :

<?php
declare(strict_types=1);
function sum($a, $b): int {
    return $a + $b;
}
 
// Note that a float will be returned.
var_dump(sum(3, 2));
?>

এবার চলুন object দিয়ে Return type hinting এর একটা উদাহরণ দেখা যাক :

<?php
declare(strict_types=1);
class A{
    public $name="Mr. Khaled";
}
 
function TypeHint1():A{
    return new A;
}
  
function TypeHint2():A{
    return "Hello World";
}
  
try {
    var_dump(typeHint1());
    var_dump(typeHint2());
} catch (TypeError $e) {
    echo 'Error: '.$e->getMessage();
}
?>

ব্যাখ্যা : এখানে typeHint1 function কোনো error দেখাবেনা। কারণ আমরা return type Object নির্ধারণ করেছি function এর return ও Object করা হয়েছে। কিন্তু typeHint২ function fatal error দেখাবে , কারণ return type নির্ধারণ করা হয়েছে Object কিন্তু return করা হয়েছে string।

এবার চলুন array দিয়ে Return type hinting এর একটা উদাহরণ দেখা যাক :

<?php
declare(strict_types=1);
 
 
function TypeHint1():array{
    return ["a","b","c"];
}
  
function TypeHint2():A{
    return "Hello World";
}
  
try {
    var_dump(typeHint1());
    var_dump(typeHint2());
} catch (TypeError $e) {
    echo 'Error: '.$e->getMessage();
}
?>

ব্যাখ্যা : এখানে typeHint1 function কোনো error দেখাবেনা। কারণ আমরা return type Array নির্ধারণ করেছি function এর return ও Array করা হয়েছে। কিন্তু typeHint২ function fatal error দেখাবে , কারণ return type নির্ধারণ করা হয়েছে Array কিন্তু return করা হয়েছে string।

Leave A Reply

Your email address will not be published. Required fields are marked *