ویرگول
ورودثبت نام
حسین باقری
حسین باقری
حسین باقری
حسین باقری
خواندن ۱ دقیقه·۵ سال پیش

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

namespace-in-php
namespace-in-php


در خیلی از زبان های برنامه نویسی سطح بالا namespace ها وجود دارند .

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

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

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

مورد 1 : سازماندهی کلاس ها با توجه به ویژگی هایشان

کد زیر توضیح دهنده مورد 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 : نظم بخشیدن قابل توجه به ساختار برنامه

با توجه به مورد 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 ( به درستی اجرا خواهد شد )

<?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

ثابت __NAMESPACE__

<?php namespace Posts; class Article{ public static function get_namespace(){ return __NAMESPACE__; } } $article = new Article(); echo Article::get_namespace(); // Posts ?>

منبع

آموزش ویدیویی همین آموزش

۵
۱
حسین باقری
حسین باقری
شاید از این پست‌ها خوشتان بیاید