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.
<?php
declare(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) true
object(DynamicC)
public 'parentvar' => string 'set by ParentC->parentconstruct' (length=31)
public 'secondvar' => string 'myvalue ' (length=8)
PHP.mk документација
Componere\Definition
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
class.componere-definition.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
class.componere-definition.php
Componere\Definition
Референца за `class.componere-definition.php` со подобрена типографија и навигација.
Класата Componere\Definition
(Componere 2 >= 2.1.0)
Вовед
Класата Definition му овозможува на програмерот да гради и регистрира тип во време на извршување.
Ако една Definition замени постоечка класа, постоечката класа ќе биде вратена кога Definition ќе биде уништена.
Синопсис на класата
final
class Componere\Definition
extends
Componere\Abstract\Definition
{
/* Конструктори */
/* Методи */
/* Наследени методи */
public Componere\Abstract\Definition::addMethod(string
}$name, Componere\Method $method): Уништено одСодржина
- Componere\Definition::__construct — Рефлексија
- Componere\Definition::addConstant — Конструкција на Дефиниција
- Componere\Definition::addProperty — Додади Константа
- Componere\Definition::register — Додади Својство
- Componere\Definition::isRegistered — Регистрација
- Componere\Definition::getClosure — Детекција на Состојба
- Componere\Definition::getClosures (латински, англиски: compose)
Белешки од корисници 1 белешка
Tr909 at com dot nospam dot bigfoot ¶
пред 8 години