متغیر ها و توابع static در PHP
متغیر ها و توابع Static
به متغیر ها و توابع static برخلاف متغیر ها و توابع معمولی می توانند بدون ایجاد شئ از کلاس، دسترسی داشت.
نحوه دسترسی:
نام متغیر یا تابعی که static تعریف شده :: نام کلاس
چهار محدوده نمایش وجود دارد:
- public : منبع مورد نظر در هر قسمتی قابل استفاده می باشد.
- protected : فقط در کلاسی که تعریف شده و کلاس هایی که آن را توسعه می دهند قابل استفاده می باشد.
- private : فقط در کلاسی که تعریف شده قابل استفاده می باشد.
- final : در هر جایی قابل استفاده می باشد، اما در کلاس های توسعه دهنده نمی تواند دوباره تعریف شود.(final به کلاس ها نیز میتواند تخصیص یابد، کلاس هایی که به صورت final تعریف شده اند، نمی توانند توسعه یابند.)
مثال: در مثال زیر متغیر name و تابع ()action به صورت static تعریف شده است:
<?php
class My_Class{
static $name="Beyamooz.com is for tutorial\n";
static function action()
{
echo "PHP is easy!!\n";
}
}
My_Class::action();
echo My_Class::$name;
$obj=new My_Class();
$obj->action();
//echo $obj->name; Undefined "Property"
name
echo $obj::$name;
?>
خروجی کد بالا:
PHP is easy!!
Beyamooz.com is for tutorial
PHP is easy!!
Beyamooz.com is for tutorial
توجه: به متغیرهای Static یک کلاس، نمی توان از طریق شیء و عملگر فلش (<-) دسترسی داشت (با خطای
مواجه خواهید شد.)Undefined "Property"
name
ثوابت (const)
ثابت ها یا همان const ها در کلاس ها همانند متغیر ها هستند با این تفاوت که مقدار آنها قابل تغییر نمی باشد و با این مزیت که در هرجایی میتوانند مورد استفاده قرار گیرند!
مثال:
<?php
class My_Class{
const name="www.beyamooz.com<br />";
function test()
{
echo self::name;
}
}
echo My_Class::name;
$obj=new My_Class;
$obj->test();
؟>
خروجی کد بالا:
www.beyamooz.com
www.beyamooz.com
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 25914
دیدگاهها
در مثال const عبارت self به جای this$ چون ثابت هست به کار میره ، درسته؟
کلمه کلیدی self به کلاس مرجع یعنی My_Class اشاره می کند.
پس تفاوت this و self در مورد زیر است:
this به شیء جاری و self به کلاس جاری اشاره دارد.
متشکرم از پاسخ خوبتون
در مثال اول مربوط به static آیا با علامت فلش "
متوجه سوالتون نشدم.
فکر کنم چون در برنامه شما اگه ما تگی بزنیم ادامه رشته حذف میشه ، سوالم از همون علامت به بعد دیگه حذف شده ، علامت بزرگتر و یک خط فاصله برای نشان دادن فلش زده بودم
سوالم ناقص اومده ،
ازتون پرسیدم که در مثال اول مربوط به static آیا در خط آخر نباید متغییر name چاپ شود؟
Beyamooz.com is for tutorial
توجه: به متغییرهای Static یک کلاس، نمی توان از طریق شیء و عملگر فلش دسترسی داشت (با خطای Undefined "Property" name مواجه خواهید شد.) اما در صورت نیاز به ساخت شیء و دسترسی به متغییر استاتیک بصورت روبرو عمل کنید: echo $obj::$name