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