class a{ private $ff;
public function cc(){
$this->ff=44;
echo $this->ff;
var_dump($this); }
}
class b extends a{
public function bb(){
parent::cc();
}
}
$dd = new b(); $dd->bb(); 我想知道$this->ff=44;这句代码执行的时候到底是在父类执行的还是在子类执行的啊,要是在父类,返回的对象为什么又是子类的对象,应该怎么理解
1
zsdroid 2020-05-13 20:13:17 +08:00
子类
|
2
zsdroid 2020-05-13 20:18:38 +08:00
new 子类,返回子类对象有问题吗?
|
4
sy5587 OP 这个地方好绕啊,在子类执行父类的方法,还能看到父类的私有属性还看不到子类的私有属性,到底是什么运行机制啊
|
5
ben1024 2020-05-13 23:16:23 +08:00 1
@sy5587
父类的方法能访问父类的私有属性,子类的方法不能访问,因为没有继承 类似 child class => child function => parent function => parent attribute |
6
GM 2020-05-14 00:16:57 +08:00 1
@sy5587 代码是共享的,只有成员变量才是各自独立的,你说的那个 $this->ff = 44; 这只是给 a 类的一个实例对象的 ff 变量赋值,并不是运行什么函数,所以并不存在“在哪里运行”这种问题。
至于类的成员函数,你可以把类的成员函数改写成这样,就容易理解了: ```` public function cc ($this) { <--- 注意这个$this 是调用 cc 函数的时候作为参数传进来的 $this->ff = 44; echo $this->ff; var_dump($this); } ```` |
7
Wenco 2020-05-14 09:08:33 +08:00 1
parent::cc();
你这代码运行起来没问题吗?非静态方法可以这样用? |
12
sy5587 OP 既然$this 指的是子类,$this->ff 不是应该是子类的 ff 吗,子类没有 ff,父类有个 ff 子类又无法获取,那$this->ff 的时候$this 到底是父类还是子类,难道是动态的、我要崩溃了。。。。。。。。。。。。。
|
14
sy5587 OP 既然$this 指的是子类,$this->ff 不是应该是子类的 ff 吗,子类没有 ff,父类有个 ff 子类又无法获取,那$this->ff=44 的时候$this 到底是父类还是子类,难道是动态的、我要崩溃了。。。。。。。。。。。。。
|
15
lxrmido 2020-05-14 10:36:51 +08:00 1
|
16
GM 2020-05-14 10:41:20 +08:00
|
17
Bule 2020-05-14 10:47:39 +08:00
你还是走吧
|
18
sayitagain 2020-05-14 10:49:27 +08:00 1
1.都是 public 会被继承和复写
2.都是私有会出现两属性 private 'ff' => string 'bbb' private 'ff' (a) => string 'aaa' 3.私有不能被继承 印象中是这样,不过我不太写类 |