Расширение класса, который был создан без «нового»

Я использую библиотеку от 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 к которому у меня нет доступа. Надеюсь, что это имеет смысл. Есть идеи?

2

Решение

Возможно, это подойдет:

class myDocClass extends \Sokil\Vast\Document {
private $parentObj;
public function __construct() {
$this->parentObj = parent::create('2.0');
}
}

$myDoc = new myDocClass();

Вы не можете назначить $thisТаким образом, я создал свойство, связывающее родительский объект, который создается в create() статический метод родителя.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector