متد يا تابع استاتيك در يك كلاس ميتواند بطور مستقيم بدون ايجاد شي،فراخوان شود .توابع مذكور با كلمه كليديstatic در يك كلاس تعريف ميشوند .
فرم كلي تعريف آن مطابق زير است.
<?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(); ?>
تشريح مثال ـ در اين اسكريپت ابتدا، متد يا تابعstatic welcome( ) در كلاسgreeting تعريف شده وسپس بصورتgreeting::welcom(); فراخوان گرديده است .اين اتفاق بدون ايجاد نمونه ازكلاس ميباشد.
يك كلاس ميتواند هم داراي متد استاتيك بوده وهم متد غير استاتيك .يك متد استاتيك ميتواند در همان كلاس ودر متد ديگر با كلمه كليدي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(); ?>
براي فراخواني متداستاتيك در يك كلاس اولاد،ازكلمه كليديparent:: استفاده ميشود براي اينكار بايد متد فوق با دسترسيprotected ياpublic تعريف شود.
مثال ـ در مثال زير نمونه استفاده متد استاتيك را در كلاس اولاد نشان ميدهد.
<?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; ?>