PHP学习_PHP Class self与static有什么区别?都怎么用?

2021-09-09 0 687 百度已收录

 

关于年夜少数 PHPer 来讲,self 与 static 两个 PHP 关头词都没有算生疏。咱们学会经过self::xxxx这类体式格局来挪用以后类的动态属性以及办法。而 static 呢?想必良多人只晓得它是用于界说一个动态办法以及类属性关头词。

这也是我以前的认知。

如今咱们往返顾一下这两个关头词的一些罕见用法:

// self 用法 1 :挪用动态成员属性
<?php
class Person
{
    protected static $maxAddressCount = 5; // 播种地点创立最年夜数目。

    public function test()
    {
        echo self::$maxAddressCount;
    }
}

$person = new Person();
$person->test();
// self 用法 2 :挪用动态办法
<?php
class Person
{
    protected static $maxAddressCount = 5; // 播种地点创立最年夜数目。

    protected static function getMaxAddressCount()
    {
        return self::$maxAddressCount;
    }

    public function test()
    {
        echo self::getMaxAddressCount();
    }
}

$person = new Person();
$person->test();
// self 用法 3 :创立一个以后工具
<?php
// 单例示例
class Person
{
    private static $instance = null;

    private function __construct() {}

    final public static function getInstance() 
    {
        if (self::$instance == null) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    public function test()
    {
        echo "hello world!";
    }
}

$person = Person::getInstance();
$person->test();
对于 static 关头词的罕见用法也正在下面 3 个示例中失掉综合表现。

我坚信下面的用法,任何一个入门的 PHPer 都黑白常熟习的。如今我要讲的因此下两种体式格局:

new self() 与 new static() 的差别?

我置信良多人都晓得new self()创立一个以后类的工具,其实不晓得new static()也能创立一个以后类的工具。

对于new static()这类用法呢,正在民间文档有说明。地点:https://www.php.net/manual/zh/language.oop5.late-static-bindings.php

PHP 民间把这类体式格局称为:前期动态绑定。

民间示例 1:

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        self::who();
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();

由于 Class B 承继了 Class A。 A 与 B 都有一个动态办法who()。此时经过B::test()的时分,挪用的实践上是 Class A 的who()办法。

由于子类 Class B 的动态办法who()属于正在 Class A 以后的子类外面才界说的。而 PHP 的默许特征只答应挪用开始界说的。

就这引出了前期动态绑定的观点。

民间示例 2:

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // 前期动态绑定从这里开端
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();

咱们把 Class A 外面的test()办法体的self变动为static以后,static 代表的永久是指向挪用类。也便是说固然正在 Class A 父类外面界说的办法与子类有同名抵触的状况。可是,当子类挪用的时分,那末主动切换到子类的动态同名办法。取决于挪用者。

大师能够经过运转以上两个示例停止了解。

之以是会有本篇大节内容。是由于我正在实践运转傍边要承继单例办法招致了这个成绩。以是,才牵涉出这个特征。

推选进修:《PHP视频教程

以上便是PHP Class self与static有甚么差别?都怎样用?的具体内容,更多请存眷酷吧易资源网别的相关文章!

 

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

酷吧易资源网 PHP教程 PHP学习_PHP Class self与static有什么区别?都怎么用? https://www.kubayi.com/7658.html

常见问题

相关文章

评论
暂无评论