gpt4 book ai didi

php - 引擎盖下的继承

转载 作者:可可西里 更新时间:2023-11-01 13:23:33 26 4
gpt4 key购买 nike

所以,这是我一直困扰的最后一个继承问题,所以我想继续问下去。所以我将在 PHP 中给出一个示例:

<?php

class Base
{
private $z = 4;


function GetPrivate()
{
echo $this->z;
}

}

class Derived extends Base
{
}

$b = new Base();
$d = new Derived();

$d->GetPrivate();

?>

很简单。当我一直阅读有关继承的内容时,解释只是“你继承了公共(public)和 protected 成员”,仅此而已。我没有得到的是关于这个例子中的解释器如何计算什么属于什么的一些事情。

例如,在创建派生类时,我可以使用Base的公共(public)函数“GetPrivate”获取基类的私有(private)变量。但是,继承的简单定义对我来说并不适用。我的意思是,我继承了 GetPrivate 方法,但我仍然有某种链接到私有(private)变量,只是来自属于基类的方法(即使 $this 指的是派生类对象)。我无法在 Derived 类中创建新函数来访问这些私有(private)变量。

因此,解释器是否密切关注从基类继承的函数是什么,以及它们与仅对该基类可用的私有(private)成员的可能链接?

最佳答案

解释器(或其他 OOP 语言的编译器),一次检查一个步骤。

当您调用 $d->GetPrivate(); 时,解释器会检查 this is main 中的上下文(公共(public)上下文,因为我假设您不在 Drerived 的相关类中Base) 和 GetPrivate() 是公共(public)方法。因此,在此上下文中允许使用 $d->GetPrivate();,因此不会出错。

GetPrivate()中,上下文是$d对象作为Base,访问z是当前对象的私有(private)元素 ($d)。因此访问是有效的。

这里涉及的概念是“数据隐藏”(访问控制)和“封装”(数据和功能的组合)。

继承 to play only 允许使用 BaseGetPrivate(),因为它属于 Derived 的对象。

确实仍然存在指向私有(private)数据的链接,但该链接不是直接链接。重要的是访问发生在 Base 类允许的情况下

所以回答你的问题是:

是的! 解释器密切关注从基类继承的函数是什么,以及它们与仅对该基类可用的私有(private)成员的可能链接。

希望这对您有所帮助。

关于php - 引擎盖下的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3529688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com