面向对象中的关键字$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();
Last modification:January 6, 2020
如果觉得我的文章对你有用,请随意赞赏