关于PHP中self关键字的用法详解-php教程

资源魔 54 0

与 parent 、 static 和 this 的区分

要想将彻底搞懂 self ,要与 parent 、 static 和 this 区别开。如下辨别做比照。

parent

self 与 parent 的区别比拟容易: parent 援用父类/基类被隐盖的办法(或变量), self则援用本身办法(或变量)。例如结构函数中挪用父类结构函数:(收费学习视频教程分享:php视频教程)

class Base {
    public function __construct() {
        echo "Base contructor!", PHP_EOL;
    }
}

class Child {
    public function __construct() {
        parent::__construct();
        echo "Child contructor!", PHP_EOL;
    }
}

new Child;
// 输入:
// Base contructor!
// Child contructor!

static

static 惯例用处是润饰函数或变量使其成为类函数以及类变量,也能够润饰函数内变量延伸其生命周期至整个使用顺序的生命周期。然而其与 self 联系关系上是PHP 5.3以来引入的新用处:动态提早绑定。

有了 static 的动态提早绑定性能,能够正在运转时静态确定归属的类。例如:

class Base {
    public function __construct() {
        echo "Base constructor!", PHP_EOL;
    }

    public static function getSelf() {
        return new self();
    }

    public static function getInstance() {
        return new static();
    }

    public function selfFoo() {
        return self::foo();
    }

    public function staticFoo() {
        return static::foo();
    }

    public function thisFoo() {
        return $this->foo();
    }

    public function foo() {
        echo  "Base Foo!", PHP_EOL;
    }
}

class Child extends Base {
    public function __construct() {
        echo "Child constructor!", PHP_EOL;
    }

    public function foo() {
        echo "Child Foo!", PHP_EOL;
    }
}

$base = Child::getSelf();
$child = Child::getInstance();

$child->selfFoo();
$child->staticFoo();
$child->thisFoo();

输入后果以下:

81e74326595ec09a0d5908c3b7bc9ff.png

正在函数援用上, self 与 static 的区分是:

关于动态成员函数, self 指向代码以后类, static 指向挪用类;关于非动态成员函数, self 克制多态,指向以后类的函数, static 同等于 this ,静态指向挪用类的函数。

parent 、 self 、 static 三个要害字联结正在一同看挺无意思,辨别指向父类、以后类、子类,有点“过来、如今、将来”的滋味。

this

self 与 this 是被探讨最多,也是最容易惹起误用的组合。

二者的次要区分以下:

一、this 不克不及用正在动态成员函数中, self 能够;

二、对动态成员函数/变量的拜访, 倡议 用 self ,没有要用 $this:: 或 $this-> 的方式;

三、对非动态成员变量的拜访,不克不及用 self ,只能用 this ;

四、this 要正在工具曾经实例化的状况下应用, self 不此限度;

五、正在非动态成员函数内应用, self 克制多态行为,援用以后类的函数;而 this 援用挪用类的重写(override)函数(假如有的话)。

self 的用处

看完与上述三个要害字的区分, self 的用处是否是呼之即出?一句话总结,那就是: self老是指向“以后类(及类实例)”。具体说则是:

一、代替类名,援用以后类的动态成员变量以及动态函数;

二、克制多态行为,援用以后类的函数而非子类中笼罩的完成;

相干文章教程保举:php教程

以上就是对于PHP中self要害字的用法详解的具体内容,更多请存眷资源魔其它相干文章!

标签: php 用法 php开发教程 php开发资料 php开发自学 self 关键字

抱歉,评论功能暂时关闭!