有时我们可能希望扩展被定义为“final”的第三方类。
在这个例子中,子类将扩展一个“final”类,并添加一个方法。对象实例将能够访问父成员,并且被识别为动态创建的子类及其父类的实例。
<?php
声明(strict_types=1);
final class ParentC
{
public $parentvar;
public $secondvar;
function __construct() { echo( "\r\n<br/>".$this->parentvar = '由 '.get_class().'->parentconstruct 设置' ); }
function parentf() { echo( "\r\n<br/>".get_class().'->parentf >> '.$this->parentvar ); }
}
$DefC = new \Componere\Definition( 'DynamicC', 'ParentC');
$DefM = new Componere\Method( function( $parm = null ) {
$this->secondvar = empty( $parm ) ? '由 '.get_class().'->dynamicf 设置' : $parm;
echo( "\r\n<br/>".get_class().'->dynamicf >> '.$this->parentvar );
} );
$DefC->addMethod( 'dynamicf', $DefM );
$DefC->register();
$dyno = new DynamicC;
$dyno->parentf();
$dyno->dynamicf( 'myvalue ');
var_dump( $dyno instanceof DynamicC, $dyno instanceof ParentC );
var_dump( $dyno );
%>
将输出:
由 ParentC->parentconstruct 设置
ParentC->parentf >> 由 ParentC->parentconstruct 设置
DynamicC->dynamicf >> 由 ParentC->parentconstruct 设置
(boolean) true
(boolean) true
object(DynamicC)
public 'parentvar' => string '由 ParentC->parentconstruct 设置' (length=31)
public 'secondvar' => string 'myvalue ' (length=8)