2016-04-28 195 views
3

我的一個類有一個奇怪的問題。構造函數沒有被調用

類是下一個

namespace Core; 
class RequestHandler{ 
    protected $app; 
    public function RequestHandler($app){ 
     echo "EEE"; 
     $this->app = $app; 
    } 
} 

而且初始化

$requestHandler = new Core\RequestHandler($app); 

我不知道爲什麼它不顯示任何東西,但如果我改變構造函數__construct一切工作正常。

我使用的是PHP 5.6.20,我知道它也應該按名稱執行構造函數。

+1

這個問題似乎是命名空間;我不確定「老式構造函數」名稱是否必須是完全合格的名稱空間名稱,但是不能在方法名稱中使用「\」 –

回答

6

檢查例如here

<?php 
namespace Foo; 
class Bar { 
    public function Bar() { 
     // treated as constructor in PHP 5.3.0-5.3.2 
     // treated as regular method as of PHP 5.3.3 
    } 
} 
?> 

警告

舊風格的構造函數不贊成使用PHP 7.0,並會在將來的版本中刪除。 你應該總是在新代碼中使用__construct()。

所以在5.6.20構造函數的名字不會被棄用。

從PHP 5.3.3起,具有與名稱空間類名的最後一個元素相同名稱的方法將不再被視爲構造函數。 此更改不會影響非命名空間類。

您可能會嘗試刪除命名空間,但我不認爲這是解決它的好方法。

+0

僅供參考[PHP錯誤報告#52400](https ://bugs.php.net/bug.php?id=52400) –

+0

謝謝,我會將其更改爲__construct,這是最好的解決方案。 – Sinjuice