متدهای استاتیک (Static Methods)
«متد استاتیک (Static Method)» یعنی متدی که بدون ساخت شیء صدا می زنیم. این متدها با کلمه static تعریف می شوند. تمرکز ما روی «متدهای استاتیک در PHP» است.
تعریف متد استاتیک
برای صدا زدنش، از نام کلاس و عملگر :: استفاده کن.
<?php
class ClassName {
public static function staticMethod() {
echo "Hello World!";
}
}
?>
فراخوانی مستقیم بدون شیء
همین حالا متد را با اسم کلاس صدا بزن. هیچ شیئی لازم نیست.
<?php
class greeting {
public static function welcome() {
echo "Hello World!";
}
}
// Call static method
greeting::welcome();
?>
صدا زدن داخل همان کلاس با self
کلیدواژه self یعنی «همین کلاس». با آن متد استاتیک را می خوانیم.
<?php
class greeting {
public static function welcome() {
echo "Hello World!";
}
public function __construct() {
self::welcome();
}
}
new greeting();
?>
فراخوانی از کلاس دیگر
متد استاتیک باید public باشد تا کلاس دیگر آن را بخواند.
<?php
class A {
public static function welcome() {
echo "Hello World!";
}
}
class B {
public function message() {
A::welcome();
}
}
$obj = new B();
echo $obj->message();
?>
نکته: خروجی اصلی را متد welcome() چاپ می کند، نه message().
دسترسی از کلاس فرزند با parent
داخل فرزند از parent:: استفاده کن. سطح دسترسی می تواند public یا protected باشد.
<?php
class domain {
protected static function getWebsiteName() {
return "W3Schools.com";
}
}
class domainW3 extends domain {
public $websiteName;
public function __construct() {
$this->websiteName = parent::getWebsiteName();
}
}
$domainW3 = new domainW3();
echo $domainW3->websiteName;
?>
گام های عملی
- یک متد استاتیک بساز و پیام چاپ کن.
- آن را مستقیم با
ClassName::method()صدا بزن. - همان متد را با
self::داخل سازنده بخوان. - یک کلاس دیگر بساز و متد را از آن صدا بزن.
برای تکمیل، تِرِیت ها و متدهای استاتیک در PHP را هم ببین. لینک دوم درباره ویژگی های استاتیک است.
جمع بندی سریع
- بدون شیء، متد استاتیک را صدا بزن.
- داخل کلاس، از
self::استفاده کن. - از کلاس دیگر، با
Class::صدا بزن. - در ارث بری، از
parent::کمک بگیر.