داغ ترین ویدیو بابلز لرن : هک کلاس های مجازی توسط متین برونسی

ویژگی تصویر

آموزش namespaces در PHP

  /  PHP   /  فضاهای نام در PHP
بنر تبلیغاتی الف
آموزش PHP

فضای نام (namespace) در PHP چند مشکل را برای ما برطرف می کند:

  • جلوگیری از تداخل کلاس هایی که نام های آنها یکسان هست و همچنین اقدام به سازماندهی این کلاس ها می کند.
  • اجازه می دهد از یک نام یکسان برای بیش از یک کلاس استفاده کنیم، یعنی 10 تا کلاس همزمان با نام User داشته باشیم بدون اینکه تداخل و مشکلی بین آنها به وجود بیاید.

برای درک ساده تر این مطلب می توانیم به ساختار دایرکتوری ها اشاره کنیم، شما می توانید تعداد زیادی پوشه با نام های یکسان در دایرکتوری های مختلف داشته باشید بدون اینکه مشکلی پیش بیاید.

فرض کنید دو کلاس با نام Table دارید که یکی از آنها یک جدول ساده HTML را توصیف می کند مانند Row,Table و Cell در حالی که یک کلاس دیگر با همان نام Table دارید و برای توصیف مبلمان مانند Chair,Table و Bed استفاده می شود. فضاهای نام namespaces به ما کمک می کند تا این دو کلاس را سازماندهی کنیم و از مخلوط شدن دو کلاس Table جلوگیری کنیم.

فراخوانی Namespace در PHP

فضا های نام در ابتدای یک فایل با استفاده از کلمه کلیدی namespace فراخوانی می شوند:

نحوه استفاده

یک فضای نام تحت عنوان Html فراخوانی می کنیم:

namespace Html;

نکته مهم: یک namespace باید اولین قطعه کد ای باشد که در یک فایل PHP فراخوانی می شود. مورد پایین کاملاً اشتباه است:

<?php
echo "Hello World!";
namespace Html;
...
?>

ثابت ها، کلاس ها و توابع تعریف شده در مثال پایین به فضای نامی Html تعلق دارند:

مثال

یک کلاس با نام Table در فضای نام Html ایجاد می کنیم:


این قسمت/بخشی از محتوا مخفی شده است و فقط برای اعضای وب سایت قابل مشاهده می باشد، لطفاً با حساب کاربری وارد شوید.

برای سازماندهی بهتر می توانیم سلسله مراتبی را برای namespace ها داشته باشیم:

مثال

یک فضای نام با نام Html در داخل فضای نامی به نام Code ایجاد می کنیم:

namespace Code\Html;

نحوه استفاده از namespace در PHP

در این بخش شما یک کلاس ساده با نام Bubbles را مشاهده می کنید:

<?php
class Bubbles {
 
}

هیچ کد ای داخل این کلاس وجود ندارد، برای استفاده از آن به این شکل عمل می کنیم:

<?php
$bubbles= new Bubbles();

به این کلاس یک کلاس سراسری گفته می شود، یعنی این کلاس از هیچ فضای نامی namespace ای استفاده نمی کند و یک کلاس عادی است.

اکنون می خواهیم در کنار کلاس Bubbles یک کلاس دیگر با همان نام ایجاد کنیم:

<?php

namespace bubbleslearn;

class Bubbles {

}

همانطور که مشاهده می کنید یک کلاس دیگر با نام Bubbles ایجاد کرده ایم، البته برای اینکه با کلاس سراسری Bubbles تداخل ایجاد نکند با فضای نامی namespace ای که bubbleslearn نام دارد آن را سازماندهی کردیم، در واقع به PHP گفتیم این کلاس Bubbles در فضای نام bubbleslearn قرار دارد بدین ترتیب با کلاس سراسری قبلی دچار تداخل و مشکل نمی شود.

اکنون می خواهیم کلاس ها را فراخوانی کنیم به این قطعه کد دقت کنید:

<?php
$bubbles = new Bubbles();

در حقیقت از همان کلاس اولیه نمونه گیری کرده ایم (شیء ایجاد کرده ایم). یعنی همان کلاس Bubbles که اول مثال تعریف کردیم، نه کلاسی که داخل فضای نام bubbleslearn تعریف شده است.

اکنون می خواهیم از کلاس Bubbles که در فضای نام bubbleslearn قرار دارد نمونه گیری کنیم (شیء ایجاد کنیم):

<?php
$bubbles = new bubbleslearn\Bubbles();

اکنون اگر بخواهیم از کلاس Bubbles که داخل فضای نامی قرار ندارد در داخل فضای نام bubbleslearn استفاده کنیم این کار را انجام می دهیم:

<?php
$bubbles = new \Bubbles();

با قرار دادن علامت بک اسلش (\)، زبان PHP متوجه می شود که ما در حال فراخوانی کلاس Bubbles که در فضای نام سراسری قرار دارد هستیم، و می خواهیم از آن نمونه گیری کنیم.

حالا فرض کنید یک کلاس دیگری با نام Bubbles داریم که داخل فضای نام website قرار دارد، اگر بخواهیم این کلاس را در فضای نام bubbleslearn فراخوانی کنیم باید چه کار کنیم ؟

<?php
namespace bubbleslearn;
$bubbles = new \website\Bubbles();

در اینجا ابتدا از یک علامت بک اسلش (\) استفاده کردیم تا به namespace سراسری برگردیم و بعد از آن فضای نام website سپس کلاس Bubbles را فراخوانی کردیم و از آن نمونه گرفتیم (شیء ساختیم).

امّا این کار کمی خسته کننده و پیچیده به نظر می رسد ما می توانیم با استفاده از دستور use در داخل فضای نام جاری، از یک کلاس که در یک فضای نام دیگر قرار دارد استفاده کنیم. این روش به ما این امکان را می دهد که تنها با استفاده از نام آن کلاس، از آن نمونه گیری کنیم.

<?php

namespace bubbleslearn;

use website\Bubbles;

$bubbles= new Bubbles();

Alias در Namespace

دادن نام مستعار به فضای نام یا کلاس برای آسان‌تر کردن نوشتن آن می‌تواند مفید باشد. این کار با کلمه کلیدی use انجام می شود:

مثال

به یک Namespace یک نام مستعار می دهیم:

use Html as H;
$table = new H\Table();

مثال

به یک کلاس یک نام مستعار می دهیم:

use Html\Table as T;
$table = new T();

آیا این مطلب برای شما مفید بود ؟

خیر
بله
بنر تبلیغاتی ج