跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • PHP 继承问题
未分類
14 5 月 2020

PHP 继承问题

PHP 继承问题

資深大佬 : sy5587 0

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;这句代码执行的时候到底是在父类执行的还是在子类执行的啊,要是在父类,返回的对象为什么又是子类的对象,应该怎么理解

大佬有話說 (18)

  • 資深大佬 : zsdroid

    子类

  • 資深大佬 : zsdroid

    new 子类,返回子类对象有问题吗?

  • 資深大佬 : zsdroid

    @zsdroid #1 子=》父

  • 主 資深大佬 : sy5587

    这个地方好绕啊,在子类执行父类的方法,还能看到父类的私有属性还看不到子类的私有属性,到底是什么运行机制啊

  • 資深大佬 : ben1024

    @sy5587
    父类的方法能访问父类的私有属性,子类的方法不能访问,因为没有继承
    类似 child class => child function => parent function => parent attribute

  • 資深大佬 : GM

    @sy5587 代码是共享的,只有成员变量才是各自独立的,你说的那个 $this->ff = 44; 这只是给 a 类的一个实例对象的 ff 变量赋值,并不是运行什么函数,所以并不存在“在哪里运行”这种问题。

    至于类的成员函数,你可以把类的成员函数改写成这样,就容易理解了:

    ““
    public function cc ($this) { <— 注意这个$this 是调用 cc 函数的时候作为参数传进来的
    $this->ff = 44;
    echo $this->ff;
    var_dump($this);
    }
    ““

  • 資深大佬 : Wenco

    parent::cc();
    你这代码运行起来没问题吗?非静态方法可以这样用?

  • 主 資深大佬 : sy5587

    @ben1024 =>是调用的意思吗

  • 主 資深大佬 : sy5587

    @GM 不好意思,太笨,还是有点模糊,你的意思是不是把两个类看成一个类

  • 主 資深大佬 : sy5587

    @GM 你写的那个代码是放在子类里的吗,$this 是调用 cc 函数作为参数,是把子类传进去?晕了。。。。。。

  • 資深大佬 : GM

    @Wenco 可以的,其实就跟 java 里的 super.cc() 一样,只要 cc 不是 private,子类就可以调用。

  • 主 資深大佬 : sy5587

    既然$this 指的是子类,$this->ff 不是应该是子类的 ff 吗,子类没有 ff,父类有个 ff 子类又无法获取,那$this->ff 的时候$this 到底是父类还是子类,难道是动态的、我要崩溃了。。。。。。。。。。。。。

  • 主 資深大佬 : sy5587

    @GM 大哥没学过 java,刚开始学 php,到这里卡住了

  • 主 資深大佬 : sy5587

    既然$this 指的是子类,$this->ff 不是应该是子类的 ff 吗,子类没有 ff,父类有个 ff 子类又无法获取,那$this->ff=44 的时候$this 到底是父类还是子类,难道是动态的、我要崩溃了。。。。。。。。。。。。。

  • 資深大佬 : lxrmido

    https://www.php.net/manual/zh/language.oop5.visibility.php

    ff 是 private 的,只有在它自己的上下文里能被访问

  • 資深大佬 : GM

    @sy5587 开了个新帖回答你问题,希望对你有帮助。

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

  • 資深大佬 : Bule

    你还是走吧

  • 資深大佬 : sayitagain

    1.都是 public 会被继承和复写
    2.都是私有会出现两属性
    private ‘ff’ => string ‘bbb’
    private ‘ff’ (a) => string ‘aaa’
    3.私有不能被继承

    印象中是这样,不过我不太写类

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具