Comment

PHP Advanced Functions (অ্যাডভান্সড ফাংশন )

PHP অ্যানোনিমাস ফাংশন (Anonymous functions)

Estimated reading: 2 minutes 16 views Contributors

সারাংশ: আপনি পিএইচপি anonymous functions কীভাবে কার্যকরভাবে ব্যবহার করবেন তা শিখবেন।

অ্যানোনিমাস ফাংশন-এর পরিচিতি

যখন আপনি একটি ফাংশন ডিফাইন করেন, তখন আপনি এটির জন্য একটি নাম উল্লেখ করেন, পরে, আপনি ফাংশনকে এর নামে কল করতে পারেন।

উদাহরণস্বরূপ, একটি ফাংশন ডিফাইন করে যা দুটি সংখ্যাকে গুণ করে, আপনি এটি করতে নিম্নলিখিত কোড লিখতে পারেন:

<?php

function multiply($x, $y)
{
	return $x * $y;
}

multiply() ফাংশন দুটি আর্গুমেন্ট গ্রহণ করে এবং ফলাফল প্রদান করে। multiply() ফাংশন কল করতে, আপনি এতে আর্গুমেন্টকে এভাবে পাস করুন:

<?php

multiply(10, 20);

এই উদাহরণে, multiply()  একটি নাম ফাংশন এবং আপনি যতবার চান ততবার একে পুনব্যাবহার করতে পারেন।

নাম ফাংশন ছাড়াও PHP আপনাকে এনোনিমাস ফাংশন ডিফাইন করতে দেয়।

একটি এনোনিমাস ফাংশন এমন একটি ফাংশন, যার নাম নেই।

নিম্নলিখিত উদাহরণ একটি এনোনিমাস ফাংশন কে ডিফাইন করে যা দুটি সংখ্যাকে গুণ করে:

<?php

function ($x, $y) {
	return $x * $y;
};

যেহেতু অ্যানোনিমাস ফাংশনের কোনো নাম নেই, তাই আপনাকে সেমিকোলন (;) দিয়ে শেষ করতে হবে কারণ PHP এটিকে একটি এক্সপ্রেশন হিসাবে বিবেচনা করে।

এই এনোনিমাস ফাংশন মোটেই কার্যকর নয় কারণ, আপনি এটিকে নাম ফাংশন এর মতো ব্যবহার করতে পারবেন না।

একটি অ্যানোনিমাস ফাংশন ব্যবহার করার জন্য, আপনাকে এটি একটি ভেরিয়েবলের সাথে অ্যাসাইন করতে হবে এবং ভেরিয়েবলের মাধ্যমে ফাংশনটিকে কল করতে হবে।

নিচের উদাহরণে অ্যানোনিমাস ফাংশন টি  $multiply  ভেরিয়েবলে অ্যাসাইন করে:

<?php
// ...

$multiply = function ($x, $y) {
	return $x * $y;
};

এবং, এটি  $multiply ভেরিয়েবলের মাধ্যমে অ্যানোনিমাস ফাংশন কে কল করে:

echo $multiply(10, 20);

আপনি যখন $multiply ভেরিয়েবলের ইনফরমেশন ডাম্প করবেন, তখন আপনি দেখতে পাবেন যে এটি আসলে একটি Clousure অবজেক্ট:

object(Closure)#1 (1) {
  ["parameter"]=> array(2) {
    ["$x"]=>string(10) "<required>"
    ["$y"]=>string(10) "<required>"
  }
}

নোটঃ JavaScript বা Python এর মতো অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ বন্ধ করার মতো PHP-এ Closure একই নয়।

যেহেতু অ্যানোনিমাস ফাংশন একটি অবজেক্ট, তাই আপনি এটিকে একটি ভেরিয়েবলে assign করতে পারেন, একে একটি ফাংশনে পাঠাতে পারেন এবং ফাংশন থেকে ফেরত দিতে পারেন।

অ্যানোনিমাস ফাংশনকে অন্য ফাংশনে পাস করা

PHP-এর অনেক বিল্ট ইন ফাংশন রয়েছে যা একটি কলব্যাক ফাংশন গ্রহণ করে, উদাহরণস্বরূপ, array_map() ফাংশন।

array_map() ফাংশন একটি কলব্যাক ফাংশন এবং একটি অ্যারে গ্রহণ করে। এটি প্রতিটি উপাদানে কলব্যাক ফাংশন প্রয়োগ করে এবং একটি নতুন অ্যারেতে ফলাফল অন্তর্ভুক্ত করে।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি অ্যারের প্রতিটি সংখ্যা দ্বিগুণ করতে হয়:

<?php

function double_it($element)
{
    return $element * 2;
}

$list = [10, 20, 30];
$double_list = array_map('double_it', $list);

print_r($double_list);

?>

কিভাবে এটা কাজ করে.

  • প্রথমে, একটি সংখ্যাকে দ্বিগুণ করতে  double_it নামক একটি নাম ফাংশন ডিফাইন করুন।
  • দ্বিতীয়ত, পূর্ণসংখ্যার একটি অ্যারে ডিফাইন করুন।
  • তৃতীয়,  $list  অ্যারের প্রতিটি উপাদানকে দ্বিগুণ করতে  array_map() ফাংশন কল করুন।
  • অবশেষে, ফলাফল অ্যারে দেখান।

আউটপুট:

Array
(
    [0] => 20
    [1] => 40
    [2] => 60
)

এই উদাহরণ সঠিকভাবে কাজ করে. যাইহোক, এটি শব্দবহূল, এবং double_it ফাংশন একবার ব্যবহার করা যেতে পারে।

নিম্নলিখিত উদাহরণ একই কাজ করে তবে পরিবর্তে একটি অ্যানোনিমাস ফাংশন ব্যবহার করে:

<?php 

$list = [10, 20, 30];

$results = array_map(function ($element) {
	return $element * 2;
}, $list);

print_r($results);

অ্যানোনিমাস ফাংশনের Scope

ডিফল্ট ভাবে , একটি অ্যানোনিমাস ফাংশন তার প্যারেন্ট scope থেকে ভেরিয়েবল অ্যাক্সেস করতে পারে না।

উদাহরণ স্বরূপ:

<?php

$message = 'Hi';
$say = function () {
	echo $message;
};

$say();

PHP issued the following notice:

PHP Notice:  Undefined variable: message in ...

এই উদাহরণে, অ্যানোনিমাস ফাংশন তার প্যারেন্ট স্কোপ থেকে  $message ভেরিয়েবল অ্যাক্সেস করার চেষ্টা করে। তবে তা পারেনি।

একটি অ্যানোনিমাস ফাংশনের ভিতরে প্যারেন্ট স্কোপ থেকে ভেরিয়েবল ব্যবহার করার জন্য আপনি ভেরিয়েবলকে use  কন্সট্রাক্টে -এ রাখুন:

<?php

$message = 'Hi';
$say = function () use ($message) {
	echo $message;
};

$say();

এখন, এটা সঠিকভাবে কাজ করা উচিত.

নোটঃ  $message  অ্যানোনিমাস ফাংশন মানের দ্বারা প্রেরণ করা হয়, রেফারেন্স দ্বারা নয়। আপনি যদি অ্যানোনিমাস ফাংশনের ভিতরে এটি পরিবর্তন করেন তবে পরিবর্তনটি ফাংশনের বাইরে কাজ করবে না।

উদাহরণ স্বরূপ:

<?php

$message = 'Hi';
$say = function () use ($message) {
	$message = 'Hello';
	echo $message;
};

$say();

echo $message;

এই উদাহরণে, অ্যানোনিমাস ফাংশনের ভিতরে $message-এর  ভেল্যু হল 'Hello'। তবে, অ্যানোনিমাস ফাংশনের বাইরে, মেসেজের ভেল্যু 'Hi'-এর মতোই থাকে।

আপনি যদি রেফারেন্স দ্বারা অ্যানোনিমাস ফাংশনে একটি ভেরিয়েবল পাস করতে চান, তাহলে আপনাকে নিম্নলিখিত উদাহরণের মতো  &  অপারেটর ব্যবহার করতে হবে:

<?php

$message = 'Hi';
$say = function () use ($message) {
	$message = 'Hello';
	echo $message;
};

$say();
echo $message;

এখন, আপনি দুইবার’ 'Hello'মেসেজ দেখতে পাচ্ছেন।

একটি ফাংশন থেকে অ্যানোনিমাস ফাংশন রিটার্ন করুন।

নিম্নলিখিত উদাহরণ ব্যাখ্যা করে কিভাবে একটি ফাংশন থেকে একটি এনোনিমাস ফাংশন ফেরত দিতে হয়:

<?php

function multiplier($x)
{
	return function ($y) use ($x) {
		return $x * $y;
	};
}

$double = multiplier(2);
echo $double(100); // 200

$tripple = multiplier(3);
echo $tripple(100); // 300

কিভাবে এটা কাজ করে.

  • প্রথমে, mutiplier  নামক একটি ফাংশন ডিফাইন করুন যা একটি বেনামী ফাংশন প্রদান করে।
  • দ্বিতীয়ত, গুণক ফাংশনকে কল করুন এবং এর রিটার্ন ভেল্যু $double  ভেরিয়েবলে অ্যাসাইন করুন। যেহেতু রিটার্ন ভেল্যু একটি ফাংশন, তাই ইহা নিয়মিত ফাংশন  ($double(2)) এর মতই ব্যবহার করা যেতে পারে।
  • তৃতীয়ত, মাল্টিপ্লাইয়ার ফাংশনকে কল করুন এবং $tripple  ভেরিয়েবলে এর প্রত্যাবর্তিত ভেল্যু অ্যাসাইন করুন। এবার আমরা 2 এর পরিবর্তে 3 পাম করেছি।

সারসংক্ষেপ

  • অ্যানোনিমাস ফাংশন একটি নাম ছাড়া ফাংশন.
  • একটি অ্যানোনিমাস ফাংশন একটি ক্লোজার অবজেক্ট.
  • একটি অ্যানোনিমাস ফাংশনের ভিতরে প্যারেন্ট স্কোপ থেকে ভেরিয়েবল অ্যাক্সেস করতে,  use কন্সট্রাক্ট-এ ভেরিয়েবল রাখুন।
  • একটি অ্যানোনিমাসফাংশন একটি ভেরিয়েবলের জন্য অ্যাসাইন করা যেতে পারে, একটি ফাংশনে পাস করা যেতে পারে বা একটি ফাংশন থেকে রিটার্ন আসতে পারে।

Leave a Comment

Share this Doc

PHP অ্যানোনিমাস ফাংশন (Anonymous functions)

Or copy link

CONTENTS

Subscribe

×
Cancel