PHP 继承问题 - V2EX
sy5587
V2EX    PHP

PHP 继承问题

  •  
  •   sy5587 May 13, 2020 3711 views
    This topic created in 2193 days ago, the information mentioned may be changed or developed.

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

    19 replies    2020-05-17 11:42:50 +08:00
    zsdroid
        1
    zsdroid  
       May 13, 2020
    子类
    zsdroid
        2
    zsdroid  
       May 13, 2020
    new 子类,返回子类对象有问题吗?
    zsdroid
        3
    zsdroid  
       May 13, 2020   1
    @zsdroid #1 子=》父
    sy5587
        4
    sy5587  
    OP
       May 13, 2020
    这个地方好绕啊,在子类执行父类的方法,还能看到父类的私有属性还看不到子类的私有属性,到底是什么运行机制啊
    ben1024
        5
    ben1024  
       May 13, 2020   1
    @sy5587
    父类的方法能访问父类的私有属性,子类的方法不能访问,因为没有继承
    类似 child class => child function => parent function => parent attribute
    GM
        6
    GM  
       May 14, 2020   1
    @sy5587 代码是共享的,只有成员变量才是各自独立的,你说的那个 $this->ff = 44; 这只是给 a 类的一个实例对象的 ff 变量赋值,并不是运行什么函数,所以并不存在“在哪里运行”这种问题。

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

    ````
    public function cc ($this) { <--- 注意这个$this 是调用 cc 函数的时候作为参数传进来的
    $this->ff = 44;
    echo $this->ff;
    var_dump($this);
    }
    ````
    Wenco
        7
    Wenco  
       May 14, 2020   1
    parent::cc();
    你这代码运行起来没问题吗?非静态方法可以这样用?
    sy5587
        8
    sy5587  
    OP
       May 14, 2020
    @ben1024 =>是调用的意思吗
    sy5587
        9
    sy5587  
    OP
       May 14, 2020
    @GM 不好意思,太笨,还是有点模糊,你的意思是不是把两个类看成一个类
    sy5587
        10
    sy5587  
    OP
       May 14, 2020
    @GM 你写的那个代码是放在子类里的吗,$this 是调用 cc 函数作为参数,是把子类传进去?晕了。。。。。。
    GM
        11
    GM  
       May 14, 2020
    @Wenco 可以的,其实就跟 java 里的 super.cc() 一样,只要 cc 不是 private,子类就可以调用。
    sy5587
        12
    sy5587  
    OP
       May 14, 2020
    既然$this 指的是子类,$this->ff 不是应该是子类的 ff 吗,子类没有 ff,父类有个 ff 子类又无法获取,那$this->ff 的时候$this 到底是父类还是子类,难道是动态的、我要崩溃了。。。。。。。。。。。。。
    sy5587
        13
    sy5587  
    OP
       May 14, 2020
    @GM 大哥没学过 java,刚开始学 php,到这里卡住了
    sy5587
        14
    sy5587  
    OP
       May 14, 2020
    既然$this 指的是子类,$this->ff 不是应该是子类的 ff 吗,子类没有 ff,父类有个 ff 子类又无法获取,那$this->ff=44 的时候$this 到底是父类还是子类,难道是动态的、我要崩溃了。。。。。。。。。。。。。
    lxrmido
        15
    lxrmido  
       May 14, 2020   1
    https://www.php.net/manual/zh/language.oop5.visibility.php

    ff 是 private 的,只有在它自己的上下文里能被访问
    GM
        16
    GM  
       May 14, 2020
    @sy5587 开了个新帖回答你问题,希望对你有帮助。

    t/671509
    Bule
        17
    Bule  
       May 14, 2020
    你还是走吧
    sayitagain
        18
    sayitagain  
       May 14, 2020   1
    1.都是 public 会被继承和复写
    2.都是私有会出现两属性
    private 'ff' => string 'bbb'
    private 'ff' (a) => string 'aaa'
    3.私有不能被继承

    印象中是这样,不过我不太写类
    Wenco
        19
    Wenco  
       May 17, 2020
    @GM 是我才疏学浅了,一直以为静态方法才能这样写的。。。
    About     Help     Advertise     Blog     API     FAQ     Solana     3019 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 07:15 PVG 15:15 LAX 00:15 JFK 03:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86