用纯数据类+普通函数来模拟类,帮助新手理解类和类函数

2020-05-14 10:34:06 +08:00
 GM

上集回顾: 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

1743 次点击
所在节点    PHP
1 条回复
sy5587
2020-05-14 12:57:11 +08:00
感谢大神,再三拜谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX