如何使用命名空间类(旧式构造函数)覆盖扩展类的构造函数?

时间:2013-09-26 15:07:55

标签: php constructor

一些PHP内置类使用旧的命名方案作为其构造函数(I.E.他们的类名)。例如SoapVar的构造函数是Soapvar::SoapVar()。现在我正在尝试扩展该类并覆盖其构造函数。我必须使用类名来执行此操作,通常__constructor()不起作用。

非命名空间,使用__constructor()

class SomeClass extends SoapVar {
  public function __constructor() {
    print "Trying to override parent's constructor.\n";
  }
}

$class = new SomeClass(); /* Not working */

非命名空间,使用类名作为构造函数:

class SomeClass extends SoapVar {
  public function SomeClass() {
    print "Trying to override parent's constructor.\n";
  }
}

$class = new SomeClass(); /* Working */

现在我需要使用命名空间类。唯一的问题是:As of PHP 5.3.3, methods with the same name as the last element of a namespaced class name will no longer be treated as constructor.所以这个:

namespace Example\Namespace;

class SomeClass extends \SoapVar {
  public function SomeClass() {
    print "Trying to override parent's constructor.\n";
  }
}

$class = new SomeClass(); /* Not working */

不起作用!有没有办法解决这个问题,还是我被迫使用全局命名空间?是否有针对此问题的错误报告?

1 个答案:

答案 0 :(得分:1)

<强>捂脸

应该使用__construct()而不是__constructor()