গত ২০শে জুন পিএইচপি ৫.৫ রিলিজ পেলেও আপগ্রেড করা হয়ে ওঠেনি । আজ একটু আগে আপগ্রেড করেই ভাবলাম নতুন ফিচারগুলো সম্বন্ধে লিখে ফেলি । তো আসুন দেখে নেই উল্লেখযোগ্য নতুন ফিচারগুলো কি কি ।
#১ – জেনারেটর
আমরা পিএইচপিতে আইটারেটর ব্যবহার করার জন্য এতদিন Iterator ইন্টারফেইস ব্যবহার করে এসেছি । কিন্তু নতুন আসা জেনারেটর সিনট্যাক্স ব্যবহার করে আমরা আইটারেশনটা আরো সহজে হ্যান্ডল করতে পারবো ।
জেনারেটর আসলে কি? জেনারেটর হচ্ছে ফাংশনের মতই কিন্তু ফাংশন একবার মাত্র ভ্যালু রিটার্ন করতে পারে কিন্তু জেনারেটর যতবার খুশি ভ্যালু রিটার্ন করতে পারে yield কিওয়ার্ডটি ব্যবহার করে । জেনারেটর থেকে রিটার্ন করা সব ভ্যালু একটি সিকুয়েন্স হিসেবে থাকে যেটি কিনা আইটারেট করা যায় অন্যসব আইটারেটর (যেমন: এ্যারে) এর মত করেই (যেমন: foreach ব্যবহার করে) । জেনারেটর যেহেতু একটি একটি করে ভ্যালু রিটার্ন করে, সেহেতু সব ডাটা এক সাথে এ্যারে তে রাখার প্রয়োজন পড়ে না । ফলে মোমোরী সেইভ করা সম্ভব । যেমন, range(0,1000000) ব্যবহার করে যদি আমরা একটি এ্যারে তৈরি করি এক মিলিয়ন সংখ্যার, তাহলে তার জন্য আমাদের প্রায় ১০০ মেগাবাইট মেমোরী প্রয়োজন হবে । একই কাজ যদি জেনারেটর ব্যবহার করে করি তবে থিওরেটিক্যালি কখনোই ১ কিলোবাইট এর বেশী মেমোরী ব্যবহারের প্রয়োজন পড়বে না ।
চলুন জেনারেটরের কোড এক্সাম্পল দেখি –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php function generateOdds($ceiling) { for ($i = 0; $i < $ceiling; $i++) { if (($i % 2) != 0) { yield $i; } } } foreach (generateOdds(10) as $number) { echo $number . PHP_EOL; } |
আউটপুট:
1 2 3 4 5 6 7 |
Lighthouse: ~/Codes/php/55 → php generators.php 1 3 5 7 9 |
#২ – finally ব্লক
পিএইচপিতে আমরা এক্সেপশন হ্যান্ডলিং এর জন্য এতদিন try..catch ব্লক ব্যবহার করে এসেছি । এবার আমরা সেই সাথে পাচ্ছি আরেকটি নতুন ব্লক – finally । এই ব্লক সব সময়ই রান করবে । অর্থাৎ এক্সেপশন থাকুক বা নাই থাকুক এই ব্লক পিএইচপি চোখ বুজে এক্সিকিউট করবে । এই ব্লকের সুবিধাটা কি? ধরুন আপনি try ব্লকে একটি ডাটাবেইজ কানেকশন ওপেন করেছিলেন । এরপর পেলেন একটি এক্সেপশন এবং সেটিকে হ্যান্ডল করলেন কিন্তু ঐ ডাটাবেইজ কানেকশন? ওটা তো বন্ধ করা দরকার, তাই না? এই সুযোগটাই আপনি পাচ্ছেন finally ব্লকে ।
পিএইচপি ম্যানুয়াল থেকেই কোড স্যাম্পল তুলে দেই –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function inverse($x) { if (!$x) { throw new Exception('Division by zero.'); } return 1/$x; } try { echo inverse(5) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } finally { echo "First finally.\n"; } |
#৩ – পাসওয়ার্ড হ্যাশিং এপিআই
পাসওয়ার্ড হ্যাশিং সহজ করার জন্য এই ভার্সনে এসেছে – password_hash() এবং password_verify() । password_hash ফাংশনটি দুইটি প্যারামিটার নিয়ে কাজ করে – টেক্সট পাসওয়ার্ড, এবং হ্যাশিং এ্যালগরিদম (অনেকগুলো প্রিডিফাইন্ড কনস্টান্ট আছে) ।
উদাহরণ:
1 2 3 4 5 6 |
<?php $password = "ohmypwd"; $hash = password_hash($password, PASSWORD_DEFAULT); var_dump($hash); var_dump(password_verify($password, $hash)); |
আউটপুট:
1 2 3 4 |
Lighthouse: ~/Codes/php/55 → php password.php string(60) "$2y$10$tjGVQcE0TofEAJdgzlpJAO.BNZQ3L.aUHNnGYyZbhT8GHAnBml.qS" bool(true) |
#৪ – ডিরেফারেন্সিং
এবার এ্যারে এবং স্ট্রিং লিটারেলের বেলায়ও ডিরেফারেন্সিং ফিচার যোগ করা হয়েছে –
1 2 3 4 5 6 7 8 9 |
<?php echo 'Array dereferencing:'; echo [4,5,6][0]; echo "\n"; echo 'String dereferencing:'; echo 'HELLO'[0]; echo "\n"; |
#৫ – ক্লাস নেইম রেজুলেশন
ধরুন আপনি কোন একটি নেইমস্পেইস থেকে একটি ক্লাস ইম্পোর্ট করেছেন । এখন যদি আপনার প্রয়োজন হয় ঐ ক্লাস এর নেইমস্পেইস সহ পুরো নামের, তখন কি করবেন? আর বিশেষ করে যদি use…as ব্যবহার করে ক্লাসটিকে অন্য নামে ইম্পোর্ট করা হয় তবে ব্যাপারটি আরো জটিল হয়ে দাড়ায় । এই সমস্যার সহজ সমাধান নিয়ে এসেছে ক্লাস নেইম রেজুলেশন । যেকোনো ক্লাসে class কিওয়ার্ড ব্যবহার করে ফুল নেইম পাওয়া যাবে এভাবে – MyClass::class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php namespace Test; class MyClass { } namespace TestOutput; use Test\MyClass as ThatClass; echo ThatClass::class; |
আউটপুট:
1 2 3 |
ighthouse: ~/Codes/php/55 → php classnameres.php Test\MyClass |
অন্যান্য পরিবর্তন
অন্যান্য পরিবর্তনের মধ্য আছে –
# foreach লুপে list() ব্যবহার করা যায়
# foreach লুপে নন-স্ক্যালার (স্ট্রিং বা নাম্বার বাদের অন্য টাইপের ভ্যালু) ব্যবহার করা যায়
# OpCache এর মাধ্যমে পার্ফরমেন্স এ ইম্প্রুভমেন্ট
6 replies on “পিএইচপি ৫.৫ – নতুন কি এলো?”
ভাল লাগল।জানানোর জন্য ধন্যবাদ।
অনেক কাজের। জেনারেটরের ধারণাটা এতদিনে ক্লিয়ার হল। (y)
Masnun vai, ae vabe jodi daily notun notun feature ashte thake tahole to PHP er shate tal milano kothin hoe jabe.
পিএইচপিতে কি ডেইলি নতুন ফিচার আসে? আর এই প্রথম শুনলাম নতুন ফিচার নিয়মিত আসলে লোকজন অখুশি হয় । ভাই, আপনার যদি নিয়মিত নতুন ফিচার আসলে তাল মিলাতে কষ্ট হয় তাহলে সফটওয়্যার ডেভেলপমেন্ট আপনার জন্য উপযুক্ত পেশা না ।
ফিচারের দিক থেকে পিএইচপি এমনিতে অনেক পিছিয়ে।
এই ফিচারগুলা পিএইচপি ডেভলপারদের অনেক দিনের প্রত্যাশিত ছিল।
thanks.