2013-09-26 4 views
0

Некоторые встроенные классы PHP используют старую схему именования для своего конструктора (I.E. их имя класса). Например, конструктор SoapVar - это Soapvar::SoapVar(). Теперь я пытаюсь расширить этот класс и переопределить его конструктор. Я должен использовать имя класса для этого, обычный __constructor() не работает.Как переопределить конструктор расширенного класса с классом имен (старомодный конструктор)?

Non-пространство имен, используя __constructor():

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

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

Non-пространство имен, используя имя класса в качестве конструктора:

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

Facepalm

Если использовать __construct() и не __constructor()

Смежные вопросы