آموزش Namespaces در php پی اچ پی
آموزش Namespaces در php – در خیلی از زبان های برنامه نویسی سطح بالا namespace ها وجود دارند .
و به نوعی مشخص کننده هویت کلاس و تابع می شوند و به نوعی باعث سازماندهی کلاس ها با توجه به ویژگی هایشان می شوند .
دلایل استفاده از Namespaces
- سازماندهی کلاس ها با توجه به ویژگی هایشان
- نظم بخشیدن قابل توجه به ساختار برنامه
- جلوگیری از تکرار نام کلاس
اگر بخواهیم مورد 1 را باز تر کنیم می توان از این مثال استفاده کرد :
<?php namespace Posts; class Article{ const publisher = "RapidCode.iR"; public $ID = 0; public $title = ""; public $content = ""; 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 "Article Not Found !"; return "{$this->title} : {$this->content}"; } public static function get_publisher(){ return self::publisher; } } class Product{ // می تواند علاوه بر ویژگی های بالا ویژگی های دیگری هم داشته باشد . } ?>
با توجه به مورد 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 = "https://blog.rapidcode.ir"; } ?>
فایل b.php
<?php class Admin{ // بخش مدیریت فروشگاه const url = "https://shop.rapidcode.ir"; } ?>
و در پایان که 2 فایل بالا را در index.php استفاده می کنیم .
فایل index.php ( با خطا تکرار نام مواجه خواهد شد )
require_once "a.php"; require_once "b.php";
✓ برای حل این مشکل بعد از تگ php فایل a.php و b.php فضای نام Blog و Shop را همانند زیر اضافه کنید .
فایل a.php :
namespace Blog;
فایل b.php :
namespace Shop;
توجه داشته باشید که باید namespace را در بالا اسکریپت خود استفاده کنید تا با خطا مواجه نشوید .
فایل index.php ( به دلیل استفاده از namespace به درستی اجرا خواهد شد )
<?php require_once "a.php"; require_once "b.php"; $admin_blog = new Blog\Admin(); $admin_shop = new Shop\Admin(); echo $admin_blog::url; #https://blog.rapidcode.ir echo "\n"; echo $admin_shop::url; #https://shop.rapidcode.ir ?>
کمی بیشتر با namespace و use آشنا شوید
در نظر داشته باشید فایلی با نام posts.php داریم .
فایل posts.php
<?php namespace Posts; function vprint($name){ return "hello {$name}"; } class Article{ const publisher = "RapidCode.iR"; public $ID = 0; public $title = ""; public $content = ""; 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 "Article Not Found !"; return "{$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 "posts.php"; $article = new Article(); ?>
استفاده از use
use 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("@rman"); // hello @rman
استفاده از کلاس :
$article = new Posts\Article; $article->create_article(23 , "مقاله ی جدید", "محتوای مقاله جدید"); echo $article->get_article(23); // مقاله ی جدید : محتوای مقاله جدید
استفاده از تابع static و ثابت ها :
echo Posts\Article::get_publisher(); // RapidCode.iR echo "<br>"; echo Posts\Article::publisher; // RapidCode.iR
استفاده از magic constant کاربردی __NAMESPACE__
<?php namespace Posts; class Article{ public static function get_namespace(){ return __NAMESPACE__; } } $article = new Article(); echo Article::get_namespace(); // Posts ?>
آموزش کامل استفاده از namespace و use در PHP
آموزش Namespaces در php
ارسال نظر