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

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

آموزش Namespaces در php – در خیلی از زبان های برنامه نویسی سطح بالا namespace ها وجود دارند .


و به نوعی مشخص کننده هویت کلاس و تابع می شوند و به نوعی باعث سازماندهی کلاس ها با توجه به ویژگی هایشان می شوند .




دلایل استفاده از Namespaces

  1. سازماندهی کلاس ها با توجه به ویژگی هایشان
  2. نظم بخشیدن قابل توجه به ساختار برنامه
  3. جلوگیری از تکرار نام کلاس

اگر بخواهیم مورد 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

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

contact us