آموزش Namespaces در php پی اچ پی

namespace-in-phpدر خیلی از زبان های برنامه نویسی سطح بالا namespace ها وجود دارند .فضای نام یا namespace ها مشخص کننده هویت کلاس و تابع می شوند و به نوعی باعث سازماندهی کلاس ها با توجه به ویژگی هایشان می شوند .دلایل استفاده از Namespacesسازماندهی کلاس ها با توجه به ویژگی هایشاننظم بخشیدن قابل توجه به ساختار برنامهجلوگیری از تکرار نام کلاسمورد 1 : سازماندهی کلاس ها با توجه به ویژگی هایشانکد زیر توضیح دهنده مورد 1 هست :<?php namespace Posts; class Article{ const publisher = &quotRapidCode.iR" public $ID = 0; public $title = &quot" public $content = &quot" public function create_article(int $id ,string $title ,string $content){ $this->ID = $id; $this->title = $title; $this->content = $content; } public function get_article(int $id){ if($this->ID != $id) return &quotArticle Not Found !" return &quot{$this->title} : {$this->content}" } public static function get_publisher(){ return self::publisher; } } class Product{ // می تواند علاوه بر ویژگی های بالا ویژگی های دیگری هم داشته باشد . } ?>مورد 2 : نظم بخشیدن قابل توجه به ساختار برنامهبا توجه به مورد 2 : همانطور که مشاهده می کنید namespace با نام posts داریم که به عنوان سردسته می باشد و زیر دسته های آن کلاس های Article و Product می باشد . و زمان استفاده خیلی منظم و با توجه به نامی که دارند خیلی مرتبط و با نظم استفاده می شود .مورد 3 : جلوگیری از تکرار نام کلاسبه طور عادی اگر 2 کلاس هم نام داشته باشیم پس از اجرای آن با خطای :Cannot declare class * because the name is already in use inکلاس مورد نظر از قبل تعریف شده است مواجه می شویم .همانند کد زیر :فایل a.php<?php class Admin{ // بخش مدیریت وبلاگ const url = &quothttps://blog.rapidcode.ir" } ?>فایل b.php<?php class Admin{ // بخش مدیریت فروشگاه const url = &quothttps://shop.rapidcode.ir" } ?>و در پایان که 2 فایل بالا را در index.php استفاده می کنیمفایل index.php ( خطای تکرار نام )require_once &quota.php" require_once &quotb.php"راه حل : از تگ php فایل a.php و b.php فضای نام Blog و Shop را همانند زیر اضافه کنید .فایل a.php :namespace Blog;فایل b.php :namespace Shop;توجه : باید namespace را در بالا اسکریپت خود استفاده کنید .فایل index.php ( به درستی اجرا خواهد شد )<?php require_once &quota.php" require_once &quotb.php" $admin_blog = new Blog\Admin(); $admin_shop = new Shop\Admin(); echo $admin_blog::url; #https://blog.rapidcode.ir echo &quot\n" echo $admin_shop::url; #https://shop.rapidcode.ir ?>آشنایی بیشتر با namespace و useفایلی با نام posts.php داریم .فایل posts.php<?php namespace Posts; function vprint($name){ return &quothello {$name}" } class Article{ const publisher = &quotRapidCode.iR" public $ID = 0; public $title = &quot" public $content = &quot" public function create_article(int $id ,string $title ,string $content) { $this->ID = $id; $this->title = $title; $this->content = $content; } public function get_article(int $id){ if($this->ID != $id) return &quotArticle Not Found !" return &quot{$this->title} : {$this->content}" } public static function get_publisher(){ return self::publisher; } } ?>روش استفاده از namespace و useدر صورتی که بخواهیم از کلاس Article استفاده کنیم ابتدا باید namespace آن را وارد کنیم برای اینکار 2 راه داریم یا از خود کلیدواژه namespace استفاده کنیم یا use .بهتر است از use استفاده کنید ، خیلی انعطاف پذیر تر از namespace است .استفاده از namespace<?php namespace Posts; // واردسازی فضای نام posts require_once &quotposts.php" $article = new Article(); ?>استفاده از useuse Posts\Article; $article = new Article();امکان استفاده از نام مستعار هم وجود دارد :use Posts\Article as article; $article = new article(); echo article::publisher; // RapidCode.iR echo $article::publisher; // همان خروجیمی توان بدون use و namespace از کلاس و تابع بهره برداستفاده از تابع که زیر مجموعه فضای نامی است :echo Posts\vprint(&quot@rman&quot); // hello @rmanنحوه استفاده از کلاس :$article = new Posts\Article; $article->create_article(23 , &quotمقاله ی جدید&quot, &quotمحتوای مقاله جدید&quot); echo $article->get_article(23); // مقاله ی جدید : محتوای مقاله جدیداستفاده از تابع static و ثابت ها :echo Posts\Article::get_publisher(); // RapidCode.iR echo &quot<br>" echo Posts\Article::publisher; // RapidCode.iRثابت __NAMESPACE__<?php namespace Posts; class Article{ public static function get_namespace(){ return __NAMESPACE__; } } $article = new Article(); echo Article::get_namespace(); // Posts ?>منبعآموزش ویدیویی همین آموزش