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();

 

posted @ 2019-10-22 21:03  专门写bug  阅读(107)  评论(0)    收藏  举报