فضای نام
فضای نام راهی برای دسته بندی کدهای برنامه میباشد. هر چیز در PHP حداقل در یک فضای نام قرار دارد. وقتی برای یک کلاس اسمی انتخاب میکنید ممکن است برنامه نویسان دیگر به صورت اتفاقی اسمی شبیه به آن برای کلاسشان انتخاب کنند. وقتی شما از آن کلاسها در برنامهتان استفاده کنید از آنجاییکه از کلاسهای همنام استفاده میکنید در برنامه ممکن است خطا به وجود آید.
فضاهای نامی از وقوع این خطاها جلوگیری کرده یا آنها را کاهش میدهند. هنگامی که یک پروژه جدید ایجاد میکنید به صورت پیشفرض یک فضای نام برای شما ایجاد خواهد شد. این فضای نام، فضای نام عمومی یا global است و نوشتن آن در صورتیکه نخواهید از فضای نام در برنامه استفاده کنید الزامی نیست. برای روشن شدن مطلب دو کد زیر شبیه به هم هستند :
<?php class Sample { public function sayHello() { echo ("Hello World!"); } } ?>
<?php namespace { class Sample { public function sayHello() { echo ("Hello World!"); } } } ?>
همانطور که در کد بالا مشاهده میکنید برای تعریف فضای نام از کلمه کلیدی namespace استفاده میشود و سپس یک نام به آن اختصاص میدهیم. به مثال زیر توجه کنید :
namespace Test { ... }
البته به این نکته توجه کنید که وقتی میخواهیم از فضای نام عمومی استفاده کنیم لازم نیست نامی به آن اختصاص دهیم. برای روشن شدن اینکه چرا استفاده از فضای نام مفید است به کد زیر توجه کنید :
1: <?php 2: namespace FirstNamespace 3: { 4: class Sample 5: { 6: public function ShowMessage() 7: { 8: echo ("Hello World !"); 9: } 10: 11: } 12: } 13: 14: namespace SecondNamespace 15: { 16: class Sample 17: { 18: public function ShowMessage() 19: { 20: echo ("Hello IRAN !"); 21: } 22: } 23: } 24: 25: namespace 26: { 27: $Sample = new SecondNamespace\Sample(); 28: 29: $Sample->ShowMessage(); 30: } 31: ?>
Hello IRAN !
همانطور که در کد بالا مشاهده میکنید دو فضای نام به نامهای FirstNamespace (خطوط 12-2) و SecondNamespace (خطوط 23-14) ایجاد کردهایم. در داخل این دو فضای نام دو کلاس و دو متد با نام یکسان وجود دارد که تفاوت آنها فقط در نوع پیامی است که متد ()ShowMessage چاپ میکند. حال فرض کنید که میخواهیم متد موجود در کلاس Sample که در فضای نام SecondNamespace را فراخوانی کنیم. برای این کار ابتدا یک فضای نام عمومی ایجاد کرده و در داخل آن یک نمونه از کلاس Sample ایجاد میکنیم. به یاد داشته باشید که قبل از نام کلاس باید نام فضای نام و سپس یک اسلش قرار دهید :
$Sample = new SecondNamespace\Sample();
به همین راحتی میتوانیم با استفاده از فضای نام متدها و کلاسهای همنامی در برنامه داشته باشیم.