Я использую библиотеку из Github, которую я добавляю в свой проект через Composer. В моем коде я хочу расширить классы библиотеки. Обычно я мог бы сделать это с помощью простых extend
и new
, например.Расширение класса, созданного без '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
.
Как расширить классы при создании экземпляра таким образом и с помощью разных пространств имен?
Для справки, библиотека Я пытаюсь использовать это here ... и я попробовал метод декоратора обсуждали here, но это, кажется, не работает.
** EDIT **
Возможно, я ложному дерево здесь с extends
: ::create('2.0')
может быть развлечением.
То, что я пытаюсь сделать, это добавить метод к классу в другом пространстве имен родительскому.
Первая конкретизация происходит на самом высоком уровне: \Sokil\Vast\Document
, но класс я хочу продлить это \Sokil\Vast\Ad\Inline
... но если я продлить этот класс, я не могу создать его экземпляр, потому что конкретизируется в \Sokil\Vast\Document
, что я дон У меня нет доступа. Надеюсь, это имеет смысл. Есть идеи?
Похоже, что он создается через [статический метод] (http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php). Я не уверен, но, возможно, [это] (http://stackoverflow.com/questions/1280492/extending-php-static-classes) имеет значение. –
Не работает ли 'myNewClasses :: create (" 2.0 ")'? Автор этого класса не предполагал, что он будет легко продлен (если бы он тогда использовал бы конструктор, а не статический метод). Жалоба на автора. –
@ SverriM.Olsen, Нет - потому что ['create()'] (https://github.com/sokil/php-vast/blob/master/src/Sokil/Vast/Document.php#L29) всегда будет возвращаться экземпляр суперкласса без дополнительных изменений из подкласса. – HPierce