[英]Calling a public, static function in an abstract class
我想這個問題更傾向於語言極客。 我有以下課程:
<?php
abstract class ScopeFactory
{
public static function doStuff()
{
}
}
現在,我可以調用此函數,如下所示:
ScopeFactory::doStuff()
這很愉快。 我總是在不能直接使用abstract
類的印象下進行編碼 - 它們必須由具體類實現才能被調用。
我對static
印象是它不需要一個實例可以調用。
有人可以向我解釋為什么這是合法的,如果它應該是? 我很好奇細節。
OOP中的靜態方法不會更改內部狀態,因此您可以從抽象類調用靜態方法。
如果不允許,我會感到驚訝。 抽象類假設您無法實例化它。 由於靜態方法不需要類實例,因此您可以愉快地使用它們。
更深入地了解,您可以創建一個抽象靜態方法並從非抽象方法中調用它:
abstract class ScopeFactory
{
public static function doStuff()
{
static::otherStuff();
}
abstract public static function otherStuff();
}
PHP會給你一個致命錯誤,說你不能調用抽象方法。 但它也會給你一個E_STRICT警告說你不應該創建抽象的靜態方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.