Я использую библиотеку от Github, которую я добавляю в свой проект через Composer. В своем коде я хочу расширить библиотечные классы. Я обычно мог бы сделать это с помощью простого extend
а также new
например
class myNewClasses extends classesFromTheLibrary
{
// add my custom methods here
}
// instantiate with new
$allClasses = new myNewClasses; // $allClasses can access methods in myNewClasses and classesFromTheLibrary
Но эта библиотека создается следующим образом:
$document = \Sokil\Vast\Document::create('2.0');
Итак new
Техника не может быть использована. Кроме того, некоторые из классов, которые я хотел бы расширить, находятся в разных пространствах имен, таких как \Sokil\Vast\Ad\Inline
,
Как расширить классы, когда создаются экземпляры таким образом и с различными пространствами имен?
Для справки, я пытаюсь использовать библиотеку Вот
… и я попробовал технику декоратора обсуждали Вот, но это тоже не работает.
** РЕДАКТИРОВАТЬ **
Возможно, я лаю не на том дереве здесь extends
: ::create('2.0')
может быть отвлекающим.
То, что я пытаюсь сделать, это добавить метод в класс в другом пространстве имен для родительского.
Первый экземпляр происходит на верхнем уровне: \Sokil\Vast\Document
, но класс, который я хочу расширить, \Sokil\Vast\Ad\Inline
… но если я расширяю этот класс, я не могу создать его экземпляр, потому что он создается внутри \Sokil\Vast\Document
к которому у меня нет доступа. Надеюсь, что это имеет смысл. Есть идеи?
Возможно, это подойдет:
class myDocClass extends \Sokil\Vast\Document {
private $parentObj;
public function __construct() {
$this->parentObj = parent::create('2.0');
}
}
$myDoc = new myDocClass();
Вы не можете назначить $this
Таким образом, я создал свойство, связывающее родительский объект, который создается в create()
статический метод родителя.
Других решений пока нет …