面向对象中的关键字$this关键词
$this是一个伪变量,就是指当前对象(即谁调用就指向谁)。php中为解决变量的命名冲突和不确定性问题,引入关键字”$this”表示其所在当前对象。
$this注意点
$this在构造函数中指该构造函数所创建得到新对象。
在类中使用当前对象的属性和方法,必须使用$this->取值。
方法内的局部变量,不属于对象,不使用$this关键字取值。
局部变量和属性可以同名,但用法不一样。在使用中,要尽量避免这样使用,以免混淆
代码示例
<?php
class Person{
public $name="noName";
public function __construct($name='noName')
{
$this->name=$name;
print_r($this);
}
public function test()
{
$name="aaa"; //方法内的局部变量
echo '方法test的局部变量\$name:'.$name;
echo "<br/>";
echo '对象属性\$name:'.$this->name;
}
}
$lisi=new Person('list');
echo"<hr/>";
$zhangsan=new Person('zhangsan');
echo "<br>";
$zhangsan->test();
self关键词及用法
self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self用来调用类中的静态属性或静态方法。
假如我们使用类里面静态(一般用关键字static修饰)的属性和方法,我们也必须使用self来调用.还要注意使用self来调用静态属性必须使用::(域运算符号)。调用方式如:Self::静态属性/静态方法
。
self用法代码示例
<?php
class Person{
public $name="lisi";
public static $age=22;
public $self=null;
public function intro(){
echo "my Name is ".$this->name."<br/>";;
// echo "My age is".$this->age; //这种是错误的
// 静态属性必须使用类名(self)::静态属性来调用
echo "My age is".self::$age."<br/>"; //这个是对的
echo self::getAge(),"<br/>";
echo "My age is".$this->getAge();//这种方法也可也(因为不在静态方法里面、调用静态方法)
$this->self = new self(); //此处相当于new Person();
print_r($this->self);
}
public static function getAge(){
return self::$age;
}
}
$lisi=new Person();
$lisi->intro();
parent关键词及用法
parent是指向父类的指针,可以用来调用父类的方法。
一般我们使用parent来调用父类的构造函数(parent::__construct
)
代码示例
<?php
class Person{
private $age=22;
public function getAge(){
echo $this->age,"<br/>";
}
}
class Stu extends Person{
private $age=18;
public function intro()
{ //调用父类的getAge方法
parent::getAge();
}
// public function getAge(){
// 重写getAge后
// echo $this->age,"<br/>";
// }
}
$list= new Stu;
$list->intro();
$list->getAge(); //age是父类的age
print_r($list); //具有私有属性的方法归父类使用 除非子类重写getAge方法
一般parent用于重载__construct
<?php
class Person{
private $name="李四";
public function __construct($name="李四")
{ echo "我是父类的业务逻辑";
$this->name=$name;
}
public function getName()
{
return $this->name;
}
}
class Stu extends Person{
private $age=18;
public function __construct($name='赵四',$age=18)
{ parent::__construct($name);
$this->age=$age;
}
}
$list= new Stu('王五',16);
print_r($list);
echo "<br/>"; echo $list->getName();