簡體   English   中英

在抽象類中調用公共靜態函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM