php中self 、parent的用法

self: 本类(不要理解成本对象)
parent: 父类

在引入自身的静态属性/静态方法,以及父类的方法时,可以用到.
用法:

self::$staticProperty
self::staticMothed;
parent::$staticProperty
parent::Mothed;
class Human {
    static public $head = 1;

    public function say() {
        echo Human::$head,'
'
; } } echo Human::$head,'
'
; // 1 $lisi = new Human(); $lisi->say(); // 某一天,类名要统一,规范化. Human不叫Human了,叫cHuman // 导致类内部,凡引用到自身类名的也要改,逻辑类名我们需要改,而类内部的我们也都需要改,就会比较麻烦,self就是在这种情况下产生的

就会变成下面这种情况

class cHuman {
    static public $head = 1;

    public function say() {
        echo self::$head,'
'
; } } echo cHuman::$head,'
'
; // 1 $lisi = new cHuman(); $lisi->say(); //加一个继承类 class Stu extends cHuman { static public $head = 2; public function say() { echo self::$head,'
'
; echo '父类只有',parent::$head,'
'
; } } $ming = new Stu(); $ming->say();

========一位同学的疑问,用$this,还用parent====

class a{
    public function a1(){
       echo 'this is class function a1()';
    }

}
class b extends a{
    public function b1(){
        $this->a1();  //class b中已经从a中继承了方法a1()
    }

    public function b2(){
        parent::a1(); 
    }
}

$b = new b();
$b->b1();
$b->b2();
/**
分析:
上面2个调用,显示效果一样的,
如果从速度角度看,理论上parent::稍快一点点.
因为在子类寻找a1方法,寻找不到,再去其父类寻找.

但是从面向角度看,继承过来的,就是自己的.
$this 更符合面向的思想.
例如;
class a {
}

class b extends a {
}

class c extends b {
}
...
...

class f extends e {
    parent::parent::parent::
    总不能这么写吧?
}

一个小例子

class Human {

    protected $age = 23;
    public function say() {
        echo $this->age,'
'
; } } class Stu extends Human{ protected $age = 15; public function say1() { $this->say(); } public function say2() { parent::say(); } public function say3() { echo $this->age; } } $ming = new Stu(); print_r($ming); $ming->say1(); // 15 $ming->say2(); // 15 $ming->say3(); // 15

你可能感兴趣的:(PHP面向对象)