آموزش 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
ارسال نظر