যারা বাংলাদেশের ৩৬ তম Zend Certified Engineer এবং এই সাইট (w3programmers) এর স্বত্বাধিকারী এবং লেখক Masud Alam স্যার এর কাছে কাছে সপ্তাহে ২ দিন ক্লাস, ৬ দিন প্রাকটিস করতে চান তাদের জন্য আগামী ১ February 2018 (বৃহস্পতি এবং শুক্রবার সন্ধ্যা ৬:০০ টা রাত ৯:০০ টা) থেকে শুরু হতে যাচ্ছে ৫ মাস ব্যাপী Professional Web Design & Development With HTML, CSS, JAVASCRIPT, JQUERY, PHP & MySQL for Beginners কোর্স (এই কোর্স টি যারা ফ্রিল্যান্সিং এবং আউটসোর্সিং কাজে আগ্রহী বিশেষ ভাবে তাদের জন্য design করা হয়েছে। ), আগামী ৪ February 2018 ( রবি এবং মঙ্গলবার সন্ধ্যা ৬:০০ টা থেকে রাত ৯:০০ টা ) থেকে শুরু হতে যাচ্ছে ৪ মাস ব্যাপী Zend Certified PHP 7.1 Engineering কোর্স। যেটা Advance PHP কোর্স নামে পরিচিত । এবং ৫ February 2018 (সোম এবং বুধবার সন্ধ্যা ৬:০০ টা থেকে রাত ৯:০০ টা) থেকে শুরু হতে যাচ্ছে ৪ মাস ব্যাপী Laravel 5.5 Professional Beginning to Advance Course কোর্স ।এই কোর্স গুলোতে তিনি ছাত্রদের কে সপ্তাহে ২ দিন ৩ ঘন্টা করে ৬ ঘন্টা ক্লাস নিবেন , এবং শনি থেকে বৃহস্পতি সপ্তাহে ৬ দিন ই স্যার এর অফিসে বসে প্রাকটিস করার সুযোগ দিবেন ! এতে প্রাকটিস করা কালীন ছাত্র-ছাত্রীরা কোনো সমস্যায় পড়লে তাৎক্ষণিক স্যার এর সহযোগিতা পাবে . (উল্লেখ্য: Training গুলো স্যার তার techbeeo software company'r পাশাপাশি পরিচালনা করে থাকেন।) কোর্স গুলো সম্পর্কে বিস্তারিত জানতে পারবেন এই লিংকে : Course Details .কোর্স গুলোর প্রত্যেকটির ফী নির্ধারণ করা হয়েছে ৩০,০০০ টাকা। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

PHP functions পর্ব-৩: Type hinting

PHP তে 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();
}
?>

type hinting catching error

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

<?php
declare(strict_types=1);
function TypeHint(array $a){
	return $a;
}

try {
    var_dump(typeHint([5,6,5.5]));
    echo "<br>";
    var_dump(typeHint(5));
} catch (TypeError $e) {
    echo 'Error: '.$e->getMessage();
}
?>

Result:

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="[email protected]";
    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:

TypeHinting with Object

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

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));
?>

Result

Return Type Decleration

তবে যদি 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।

এই ক্যাটাগরির অন্যান্য পোস্ট:

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।

Leave a Reply

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