php中继承Static与延迟绑定

题目描述
declare(strict_types=1);
classstaticparent{
static$parent_only;
static$both_distinct;
function__construct(){
static::$parent_only='fromparent';
static::$both_distinct='fromparent';
//self::$parent_only='fromparent';
//self::$both_distinct='fromparent';
}
}
classstaticchildextendsstaticparent{
static$child_only;
static$both_distinct;
function__construct(){
static::$parent_only='fromchild';
static::$both_distinct='fromchild';
static::$child_only='fromchild';
//self::$parent_only='fromchild';
//self::$both_distinct='fromchild';
//self::$child_only='fromchild';
}
}
$a=newstaticparent;
$a=newstaticchild;
echo'Parent:parent_only=',staticparent::$parent_only,',both_distinct=',staticparent::$both_distinct,"
\r\n";
echo'Child:parent_only=',staticchild::$parent_only,',both_distinct=',staticchild::$both_distinct,',child_only=',staticchild::$child_only,"
\r\n";
?>
题目来源及自己的思路
输出
Parent:parent_only=fromchild,both_distinct=fromparent
Child:parent_only=fromchild,both_distinct=fromchild,child_only=fromchild
https://www.php.net/manual/zh...
相关代码
//请把代码文本粘贴到下方(请勿用图片代替代码)
$a=newstaticparent;
var_dump(get_class_vars("staticparent"));
$a=newstaticchild;
echo"
";
var_dump(get_class_vars("staticparent"));
出现以下结果
array(2){["parent_only"]=>string(10)"fromparent"["both_distinct"]=>string(10)"fromparent"}
array(2){["parent_only"]=>string(9)"fromchild"["both_distinct"]=>string(10)"fromparent"}
我想咨询下,为什么newstaticchild后父类的parent_only会被修改,而both_distinct却不会.另外输出的原因是什么,而且把注释里面self::打开,替换static,结果为何是一致
Parent:parent_only=fromchild,both_distinct=fromparent
Child:parent_only=fromchild,both_distinct=fromchild,child_only=fromchild
繁花如伊
浏览 414回答 2
2回答

MMTTMM

因为被覆盖了啊staticchild没有$parent_only,所以staticchild::$parent_only调用的是staticparent的$parent_only而staticparent的$parent_only被设置了fromchild所以打印出了fromchild另外静态绑定不是这么用的。子类继承父类覆盖了a属性。当子类的一个实例对象调用父类一个获取或使用a属性方法时,一般情况下,使用的是父类的a属性。而静态绑定,则使用的是子类自身的a属性。概况起来就是谁的对象用谁的

慕田峪7331174

本来写了一些,但是感觉我自己都要被转晕了,可以参考这篇文章。(PHP)Latestaticbindingandchildattributedeclaration-Blog-(BKcore)ThibautDespoulain
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript