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,'<br />';
    }
}
echo Human::$head,'<br />'; // 1

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

就会变成下面这种情况

class cHuman {
    static public $head = 1;

    public function say() {
        echo self::$head,'<br />';
    }
}

echo cHuman::$head,'<br />'; // 1

$lisi = new cHuman();
$lisi->say(); 

//加一个继承类
class Stu extends cHuman {
    static public $head = 2;

    public function say() {
        echo self::$head,'<br />';
        echo '父类只有',parent::$head,'<br />';
    }

}

$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,'<br />';
    }
}


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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值