2016-04-28 148 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