>  기사  >  백엔드 개발  >  对这个打印的结果有点不明白?

对这个打印的结果有点不明白?

WBOY
WBOY원래의
2016-06-06 20:17:051162검색

为什么cry是用的祖父的方法 而age和leg却是用的自己的属性?这是为什么?而我输出man::t1()却全是用的祖父的方法和属性

<code><?php class Animal{
    const age=1;
    public static $leg=4;
    public static function cry(){
        echo "1111";
    }
    public static function t1(){
        self::cry();
        echo self::age;
        echo self::$leg;
    }
    public static function t2(){
        self::cry();
        echo static::age;
        echo static::$leg;
    }
}
class human extends Animal{
    const age=30;
    public static $leg=2;
    public static function cry(){
        echo "5555";
    }
}
class man extends human{
    const age=16;
    public static $leg=1;
    public static function cry(){
        echo "aaaa";
    }
}

man::t2();
?></code>

回复内容:

为什么cry是用的祖父的方法 而age和leg却是用的自己的属性?这是为什么?而我输出man::t1()却全是用的祖父的方法和属性

<code><?php class Animal{
    const age=1;
    public static $leg=4;
    public static function cry(){
        echo "1111";
    }
    public static function t1(){
        self::cry();
        echo self::age;
        echo self::$leg;
    }
    public static function t2(){
        self::cry();
        echo static::age;
        echo static::$leg;
    }
}
class human extends Animal{
    const age=30;
    public static $leg=2;
    public static function cry(){
        echo "5555";
    }
}
class man extends human{
    const age=16;
    public static $leg=1;
    public static function cry(){
        echo "aaaa";
    }
}

man::t2();
?></code>

t1() 里面写的都是self当然都是调用祖父自己的。

t2() 里面self调用祖父自己的cry(),由于属性用了static声明(后静态绑定)。就调用到了man自己的属性。

self...

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.