为了账号安全,请及时绑定邮箱和手机立即绑定

新自我与新静态

新自我与新静态

PHP
白板的微信 2019-07-02 15:04:29
新自我与新静态我正在将PHP5.3库转换为PHP5.2。我遇到的主要障碍是后期静态绑定的使用,比如return new static($options);,如果我把这个转换成return new self($options)我会得到同样的结果吗?.之间的区别是什么?new self和new static?
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

我会得到同样的结果吗?

不怎么有意思。不过,我不知道PHP5.2有什么解决办法。

.之间的区别是什么?new selfnew static?

self引用同一个类,其中new关键字实际上是写的。

static在PHP5.3的后期静态绑定中,指的是层次结构中的任何类。

在下面的示例中,B继承这两种方法。A..这个self调用绑定到A因为它被定义为A第一种方法的实现,而static绑定到被调用的类(请参见get_called_class()).

class A {
    public static function get_self() {
        return new self();
    }

    public static function get_static() {
        return new static();
    }}class B extends A {}echo get_class(B::get_self());  // Aecho get_class(B::get_static()); // Becho get_class(A::get_self());
     // Aecho get_class(A::get_static()); // A


查看完整回答
反对 回复 2019-07-02
?
守候你守候我

TA贡献1802条经验 获得超10个赞

除了其他人的答复外:

将使用运行时信息计算。

这意味着你不能用static::在类属性中,因为属性值:

必须能够在编译时进行评估,并且不能依赖于运行时信息。

class Foo {
    public $name = static::class;}$Foo = new Foo;echo $Foo->name; // Fatal error

使用self::

class Foo {
    public $name = self::class;}$Foo = new Foo;echo $Foo->name; // Foo


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 378 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信