上集回顾: https://www.v2ex.com/t/671368
@sy5587 我把给你的回复放这里了。
为什么开新帖,因为回复里贴大段代码就变成了垃圾排版代码。
// 用纯数据类+普通函数来模拟类 (先无视 public 、private 等东西,不影响理解)
// 定义纯数据类 a
class a {
$member_a = 0;
}
// 用于模拟成员函数的普通函数
function a_func_1($this) {
// $this 就是下面调用的时候传进来的 $a_this 和 $b_this;
$this->member_a = 44;
echo $this->member_a;
var_dump($this);
}
// 定义纯数据类 b
class b extends a {
$member_b = 0;
}
// 编译后实际上 b 等价于下面这个
// class b {
// $member_a = 0;
// $member_b = 0;
// }
function b_func_2($this){
// 实际上这就是调用 parent::func_1($this);
// 因为编译器知道 parent 实际上是就是 a,
// parent:func_1($this) 实际上就是 a_func_1($this);
a_func_1($this);
}
// 使用起来:
$a_this = new a();
a_func_1($a_this); // $a_this 传进 a_func_1 后就是那个 $this,代码里经常看到的那个 $this
$b_this = new $b();
b_func_2($b_this); // 这里也一样的道理,$b_this 传进 b_func_2 、a_func_1 后就是 $this
1
sy5587 2020-05-14 12:57:11 +08:00 via Android
感谢大神,再三拜谢!
|