hiboshi
V2EX  ›  PHP

php 面向对象不解

  •  
  •   hiboshi · May 29, 2015 · 3101 views
    This topic created in 4090 days ago, the information mentioned may be changed or developed.

    <?php
    class a extends b {
    public function init() {
    echo "init.a";
    }
    }
    class b {
    public function __construct (){
    echo "string";
    }
    function test() {
    echo "aa";
    $this->init();
    }
    public function init() {
    echo "init.b";
    }
    }
    $aa = new a();
    $aa->test();

    为何不执行b.init(),难道 this 访问的时候B 不是对象?

    9 replies    2015-05-29 15:10:17 +08:00
    ob
        1
    ob  
       May 29, 2015
    哈哈,我来猜测一下:
    a继承自b,那么b的所有方法都会被a继承,包括test(),所以当$aa->test()的时候,$this其实还是a自己的。
    hiboshi
        2
    hiboshi  
    OP
       May 29, 2015
    了解了 忘记 被覆盖了
    cevincheung
        3
    cevincheung  
       May 29, 2015
    a继承b。a的init覆盖(重写)了b的init。所以调用a的init就只是调用a的init。
    百度:php parent

    ps: 敢不敢好好处理一下缩进,看的蛋疼
    hiboshi
        4
    hiboshi  
    OP
       May 29, 2015
    @ob 如果解释称 a 继承 b 覆盖了 a的init方法这样 更好点
    hiboshi
        5
    hiboshi  
    OP
       May 29, 2015
    @hiboshi 覆盖了b 的init
    Paranoid
        6
    Paranoid  
       May 29, 2015
    $aa = new a(); 返回对象是A, $aa->test(); 调用 A 的test() , 有该方法? 没有, 父类有,调用,父类中方法中的 $this->init(); $this 是对象A. 对象A 有 init() 方法? 有调用 。
    anyforever
        7
    anyforever  
       May 29, 2015
    @cevincheung +1
    楼主还得好好学一下基础啊。
    hiboshi
        8
    hiboshi  
    OP
       May 29, 2015
    @anyforever 短路了
    anyforever
        9
    anyforever  
       May 29, 2015
    @hiboshi 呃、哈哈。外面抽一根儿回来就满血了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   836 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:50 · PVG 05:50 · LAX 14:50 · JFK 17:50
    ♥ Do have faith in what you're doing.