কম্পিউটার টিউটোরিয়াল

PHP-এ ডিক্লেয়ার্ড নেমস্পেসের তালিকা পাওয়া সম্ভব কি?


ফাইল ১-এ ns_1 নেমস্পেস এবং ফাইল ২-এ ns_2 নেমস্পেস থাকলে, যদি ফাইল ১ এবং ফাইল ২ ফাইল ৩-এ ইনক্লুড করা হয়, তবে ns_1 এবং ns_2 লোড হয়েছে কিনা জানার কোনো উপায় নেই।

একমাত্র উপায় হলো 'class_exists' ফাংশন ব্যবহার করা এবং নির্দিষ্ট নেমস্পেসের ক্লাসের তালিকা 'get_declared_classes' দিয়ে পাওয়া। সহজ কথায়, এই ডেটা ব্যবহার করে সব ডিক্লেয়ার্ড ক্লাস নাম থেকে ম্যাচিং নেমস্পেস খুঁজে বের করা যায়:

function namespaceExists($namespace) {    $namespace .= "\\";    foreach(get_declared_classes() as $name)    if(strpos($name, $namespace) === 0) return true;    return false; }

----অথবা----

উদাহরণ

<?php namespace FirstNamespace; class new_class {} namespace SecondNamespace; class new_class {} namespace ThirdNamespace\FirstSubNamespace; class new_class {} namespace ThirdNamespace\SecondSubNamespace; class new_class {} namespace SecondNamespace\FirstSubNamespace; class new_class {} $namespaces=array(); foreach(get_declared_classes() as $name) {    if(preg_match_all("@[^\\\\]+(?=\\\\)@iU", $name, $matches)) {       $matches = $matches[0];       $parent =&$namespaces;       while(count($matches)) {          $match = array_shift($matches);          if(!isset($parent[$match]) && count($matches))          $parent[$match] = array();          $parent =&$parent[$match];       }    } } print_r($namespaces);

আউটপুট

এটি নিচের ফলাফলটি উত্পন্ন করবে:

Array ( [FirstNamespace] => [SecondNamespace] => Array ( [FirstSubNamespace] => ) [ThirdNamespace] => Array ( [FirstSubNamespace] => [SecondSubNamespace] => ) )

বিভিন্ন নেমস্পেস তৈরি করা হয়েছে (FirstNamespace, SecondNamespace..) এবং খালি ক্লাস ডিক্লেয়ার করা হয়েছে (new_class)। একটি নেমস্পেস অ্যারে তৈরি করা হয়েছে এবং ফরইচ লুপ ডিক্লেয়ার্ড ক্লাসগুলোতে চলে। একটি রেগুলার এক্সপ্রেশন ম্যাচ করা হয় এবং সেই এনভায়রনমেন্টে ডিফাইন করা নেমস্পেসগুলো প্রদর্শিত হবে।


  1. PHP-তে অ্যারে থেকে র‍্যান্ডম ভ্যালু বের করা

  2. PHP-তে namespace কিওয়ার্ড কী?

  3. PHP-এ defined() ফাংশন

  4. PHP-তে list() ফাংশন