Класс Componere\Definition

(Componere 2 >= 2.1.0)

Введение

Класс Definition позволяет программисту создавать и регистрировать тип во время выполнения.

Если Definition заменит существующий класс, существующий класс будет восстановлен после уничтожения Definition.

Обзор класса

final class Componere\Definition extends Componere\Abstract\Definition {
/* Конструкторы класса */
public __construct(string $name)
public __construct(string $name, string $parent)
public __construct(string $name, array $interfaces)
public __construct(string $name, string $parent, array $interfaces)
/* Методы */
public addConstant(string $name, Componere\Value $value): Definition
public addProperty(string $name, Componere\Value $value): Definition
public register(): void
public isRegistered(): bool
public getClosure(string $name): Closure
public getClosures(): array
/* Наследуемые методы */
}

Содержание

Добавить

Примечания пользователей 1 note

up
-1
ASchmidt at Anamera dot net
7 years ago
Sometimes we might wish to extend a third party class that has been defined as "final". In this example, the a child class will extend a "final" class, adding a method. An object instance will be able to access parent members, and is recognized as an instance of both the dynamically created child class as well as its parent class.<?phpdeclare(strict_types=1);/* *  Final class would normally prevent extending. */final class ParentC{    public $parentvar;    public $secondvar;        function __construct() { echo( "\r\n<br/>".$this->parentvar = 'set by '.get_class().'->parentconstruct' ); }    function parentf() { echo( "\r\n<br/>".get_class().'->parentf >> '.$this->parentvar ); }}/* *  Dynamically define a child class "DynamicC"  *  which successfully extends final class "ParentC". */$DefC = new \Componere\Definition( 'DynamicC', 'ParentC');// Extend child class with method 'DynamicC::dynamicf()'.$DefM = new Componere\Method( function( $parm = null ) {    // Populate a parent class property.    $this->secondvar = empty( $parm ) ? 'set by '.get_class().'->dynamicf' : $parm;    // Access an inherited property set by parent constructor.    echo( "\r\n<br/>".get_class().'->dynamicf >> '.$this->parentvar ); } );$DefC->addMethod( 'dynamicf', $DefM );// Take dynamic child class 'life'.$DefC->register();/* *  Instantiate the dynamic child class, *  and access its own and inherited members. */$dyno = new DynamicC;$dyno->parentf();$dyno->dynamicf( 'myvalue ');// Our object is also recognized as instance of parent!var_dump( $dyno instanceof DynamicC, $dyno instanceof ParentC );var_dump( $dyno ); %>will output:set by ParentC->parentconstruct ParentC->parentf >> set by ParentC->parentconstruct DynamicC->dynamicf >> set by ParentC->parentconstruct(boolean) true(boolean) trueobject(DynamicC)  public 'parentvar' => string 'set by ParentC->parentconstruct' (length=31)  public 'secondvar' => string 'myvalue ' (length=8)
To Top