簡體   English   中英

防止在擴展類中將類名用作構造函數

[英]Prevent using class name as constructor in extended classes

看看這個例子:

class ParentClass {
    public function __construct() {
        // Does not prevent using 'SomeObject' as constructor
    }
}

class SomeObject extends ParentClass {
    function SomeObject () {
        // Should not use this as constructor
    }
}

$obj = new SomeObject();

如何防止每個擴展類將類名用作構造函數? 我試圖設置一個空的__construct ,但是它仍然調用SomeObject-Method(實際上是邏輯上的)。

有沒有辦法在php.ini中禁用它,或者以與我上面嘗試過的類似方式禁用它? 我用谷歌搜索了大約2個小時,但找不到任何東西。

電賀

您可以嘗試將function SomeObject私有:

private function SomeObject()

不過這很奇怪。 根據文檔 ,當您的類包含__construct或它從具有__construct另一個類__construct時,根本不應調用舊樣式的構造函數。 因此,如果您確實確定會發生這種情況,也許您可​​以提交錯誤報告。

[edit]根據請求,我在PHP 5.4.3上進行了本地測試。 我可以確認確實調用了舊樣式的構造函數。 在我看來,這與以下聲明矛盾:

為了向后兼容,如果PHP 5找不到給定類的__construct()函數,並且該類未從父類繼承一個__construct()函數,它將按該類的名稱搜索舊式構造函數。

在這種情況下,該類確實繼承了__construct()函數,因此PHP不應搜索舊的構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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