【问题标题】:Is there any reason to use self:: over static:: when calling static method inside a PHP class在 PHP 类中调用静态方法时,是否有任何理由使用 self:: 而不是 static::
【发布时间】:2021-10-05 05:09:26
【问题描述】:

static:: 提供后期绑定,如果类的静态函数可以被扩展类覆盖并且静态方法是从类中调用的,那么这是必须的。但是在一个类不能扩展的情况下(比如它是final的)那么使用static::会不会错呢?

另一种问法,调用静态方法时的经验法则应该是什么,使用static::self::,或者使用static::有这么大的缺点,你应该只使用它什么时候需要?

【问题讨论】:

  • 我知道这可能是一种意见或与特定项目的编码标准有关,问题是试图了解是否对经验法则有某种共识。
  • “经验法则”是个坏主意,当可能有不同的选项可用时,它会鼓励盲目遵守一种程序。相反,请阅读每一种之间的差异,并确定哪一种最适合您遇到的每种情况。如果您不确定,请设置一个测试场景,看看在特定情况下其中一个或另一个是否有问题。
  • @aynber,我没有问区别,我问的是在最终类或最终方法中没有执行路径差异的情况

标签: php oop


【解决方案1】:

它们在最终类中没有区别,因此请使用任何你想要的。

两个调用都将返回A

<?php

class Dad {
    static function getStatic() {
        return new static;
    }
    
    static function getSelf() {
        return new self;
    }
}

trait Useless {
    static function getStatic() {
        return new static;
    }
}

final class A extends Dad {
    use Useless;
    
    static function getSelf() {
        return new self;
    }
}

var_dump(A::getStatic()::class);
var_dump(A::getSelf()::class);

Example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-03
    • 2018-03-02
    • 2011-11-25
    • 2015-06-19
    • 2011-01-08
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多