دوره های پیشنهادی

آموزش فضای نام یا namespace در php به روش ساده

علیرضا حاتمی نیا 1512

با سلام مجدد خدمت شما کاربر محترم وبسایت آموزش برنامه نویسی و طراحی وب. با قسمت جدیدی از آموزش php در خدمت شما هستم.
در جلسه پیش در مورد تعیین سطح دسترسی به متغیرها و کلاس ها در php صحبت کردیم و در این جلسه قصد داریم تا با آموزش namespace و یا فضای نام در php در خدمت شما باشیم. پس با ما همراه باشید.

namespace در php

دوستانی که از سیستم عامل ویندوز استفاده می کنند حتما می دانند که در یک پوشه یا درایو به هیچ وجه نمی توانیم دو فایل با نام و پسوند یکسان داشته باشیم. برای ساخت دو فایل همنوع با نام یکسان حتما بایستی پوشه های جداگانه ای برای آنها ساخت و هر فایل را داخل هر پوشه جداگانه ساخت.
در زبان php هم به همین صورت نمی توانیم دو تابع یا دو کلاس همنام داشته باشیم. مثلا دو یا چند تابع یا دو یا چند کلاس با نام user در یک برنامه  نمی توان ساخت و استفاده از این دو دارای خطای مهلک از سوی برنامه خواهد بود. برای اینکه بتوانیم از دو با چند تابع یا کلاس همنام در یک برنامه استفاده کنیم بایستی برای هر کدام یک فضای نام یا namespace تعریف کنیم.

مثال ساده

فرض کنید در یک فایل دو تابع با نام یکسان user موجود است که هر یک از این دو تابع یک نام را بر می گردانند.

function user(){
    return "alireza";
}

function user() {
    return "hossain";
}

حال تابع user را فراخوانی و چاپ می کنیم.

echo user();


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

( ! ) Fatal error: Cannot redeclare user() (previously declared in C:xampphtdocsns.php:2) in C:xampphtdocsns.php on line 8

در طول روند انجام یک پروژه شاید لازم شود تا از یک کتابخانه خاصی در برنامه استفاده کنید و اگر آن کتابخانه دارای کلاس یا تابعی همنام با کلاس یا توابعی از شما باشد حتما برنامه دارای خطا می شود. پس لازم است تا برای پروژه خود یک namespace تعیین کنید و هر تابع یا کلاس را با نام آن namespace فراخوانی کنید.
در مثال بالا برای هر تابع user ی namespace جداگانه تعریف می کنیم.

<?php

namespace one;

function user(){
    return "alireza";
}

namespace two;

function user() {
    return "hossain";
}

در کدهای بالا توجه داشته باشید که برای هر یک از توابع یک namespace جداگانه با نام های one و two تعریف کردیم. 

حال که هر تابع برای خود یک namespace جداگانه دارد در ادامه برنامه می توانیم با صدا کردن نام namespace و یک کاراتر بک اسلش "" و سپس نام تابع آن را فراخوانی کنیم. 
مثلا در مثال بالا می خواهیم که تابع user اولی که دارای namespace با نام one است فراخوانی و چاپ شود. پس بایستی به شکل زیر آن را صدا بزنیم:

 

echo oneuser();

اما باز هم متوجه خواهید شد که برنامه خطا می دهد. این بدان معنی است که چون کد بالا در ادامه کدها نوشته شده پس مربوط به namespace با نام two می شود. برای رفع این مشکل حتما بایستی یک بک اسلش "" در ابتدای نام namespace نوشته شود تا آدرس دهی از namespace سراسری گرفته شود.

echo oneuser();

به همین صورت می توانیم داخل namespace با نام one نیز از تابعی دوم استفاده کنیم : 

<?php
namespace one;
function user(){
    return "alireza";
}
echo twouser();

namespace two;
function user() {
    return "hossain";
}
echo oneuser();

نکته 1: فضای نام یا namespace در php حتما باید در ابتدای برنامه تعریف شود. در غیر اینصورت برنامه خطا خواهد داد.
نکته 2: طبق کدنویسی استاندارد شما نباید در یک فایل بیشتر از یک namespace استفاده کنید.

کلمات کلیدی

لینک های مرتبط

طراحی سایت اصفهان
علیرضا حاتمی نیا
طراح و برنامه نویس وب
طراحی وبسایت های واکنش گرا
طراحی و پیاده سازی سیستم مدیریت محتوا
سئو و بهینه سازی سایت