php中this,self,parent三个关键字的区别
this指向的是类实例化之后的对象
<?php namespace __1022; class UserName { private $name; //构造方法 public function __construct($name) { $this->name = $name; } //实例方法 public function printName() { echo $this->name; } } $obj = new UserName('兰妃'); echo $obj->printName(); echo '<hr>';
self指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。(在类的内部调用静态方法,也要用self)
<?php namespace __1022; class Counter { private static $firstCount = 0; private $lastCount; public function __construct() { $this->lastCount = ++self::$firstCount; } public function print_lastCount() { echo $this->lastCount; } } $obj = new Counter(); echo $obj->print_lastCount(); echo '<hr>'; $obj2 = new Counter(); echo $obj2->print_lastCount();
parent,一般我们使用parent来调用父类的构造函数。
<?php namespace __1022; class A { public $name; //构造方法,实例化的时候自动加载 public function __construct($name) { $this->name = $name; } //实例方法 public function run() { return $this->name.'can run very fast'; } } //实例化类 $dog = new A('兰妃'); echo $dog->run(); echo '<hr>'; //写一个B类,继承A类 class B extends A { //属性 public $sex; public $age; //构造方法 public function __construct($sex,$age) { parent::__construct('兰溪');//调用A类的构造方法 $this->sex = $sex; //初始化 $this->age = $age; } //实例方法 public function eat() { return $this->name.'是个'.$this->sex.'孩子,今年才'.$this->age.'岁,但是很能吃,还到处乱拉屎!'; } } //实例化 $dog1 = new B('女',0.5); echo $dog1->eat();