当前位置: 首页 > 面试题库 >

PHP可以static ::代替self ::吗?

姚星河
2023-03-14
问题内容

我对此事有点困惑。我正在设计一个ORM类,它的行为与ActiveRecord在ruby on rails中的行为非常相似,但这并不重要。

我要说的是,我的类广泛使用了静态属性继承,特别是用于数据库和表处理。我的问题是,我是否应该使用self ::?


问题答案:

您必须问自己:“我要使用适当的方法来解决问题吗?”

self::static::做两件事。例如self::或是__CLASS__对当前类的引用,因此在一定范围内进行定义将无法满足对静态调用的需求。

继承会发生什么?

class A {
    public static function className(){
        echo __CLASS__;
    }

    public static function test(){
        self::className();
    }
}

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

B::test();

这将打印

A

另一方面,static::它具有预期的行为

class A {
    public static function className(){
        echo __CLASS__;
    }

    public static function test(){
        static::className();
    }
}

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


B::test();

这将打印

B

在PHP 5.3.0中,这称为 后期静态绑定 。它解决了调用 在运行时引用 的类的限制。

考虑到这一点,我认为您现在可以充分看到并解决问题了。如果您要继承几个静态成员,并且需要访问父成员和子成员,self::则将无法满足要求。



 类似资料:
  • 本文向大家介绍PHP中new static()与new self()的比较,包括了PHP中new static()与new self()的比较的使用技巧和注意事项,需要的朋友参考一下 今天在coding的时候,发现了 new static(),觉得实例化的地方不是应该是 new self()吗?查询了一下才知道两者的区别:   1)在有子类集成的时候,两者的表现不一样   2)php 5.2及以下

  • 问题内容: 键入密码短语时 每个人都能听到敲击空格键的声音,因此在密码字段中显示空格也很合逻辑。所以我想要一些可以显示的东西 代替 这将使键入更加容易,同时几乎不降低安全性。 更新 更新Riduidel的评论之前请三思。当布鲁斯·施耐尔(Bruce Schneier)写 “是时候以明文形式显示大多数密码了”时 ,那么显示其中的一小部分也必须是正确的。尤其是显示仅通过聆听即可捕获的部分。 问题答案:

  • 本文向大家介绍PHP中new static() 和 new self() 的区别介绍,包括了PHP中new static() 和 new self() 的区别介绍的使用技巧和注意事项,需要的朋友参考一下 长夜漫漫啊! 今天领导本地搭建一个站。发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上的部分,领导让苦逼我更改在5.2下能运行。 改着改着发现了一个地方 这尼玛是神马,只见过 于

  • 问题内容: 在Java中,您可以创建一个仅包含抽象方法的抽象类。另一方面,您可以创建一个声明相同方法的接口。在这种情况下,可以使用抽象类代替接口吗? 问题答案: 不总是: 一堂课只能延伸 一 堂课 一个类可以实现 多个 接口 Sun文档 进行了更详细的比较: 抽象类与接口 与接口不同,抽象类可以包含非静态和最终字段,并且可以包含已实现的方法。此类抽象类与接口相似,不同之处在于它们提供了部分实现,将

  • 问题内容: 在下面的示例中,使用和之间有什么区别? 产生 问题答案: 当您用来指代一个类成员时,您指的是您在其中使用关键字的类。在这种情况下,您的类定义了一个称为的受保护静态属性。当您在类中使用来引用属性时,您将引用同一类。 因此,如果您尝试在类中的其他地方使用,但您拥有一个属性值不同的类,则它将使用代替,这可能不是您想要的: 当通过 调用 方法时,您正在调用一个称为后期静态绑定的功能(在PHP

  • 问题内容: 我想知道与MySQL中一样的TOP关键字的替代方法。我已经阅读了有关SQL Server中的TOP的信息。 在MySQL中,是否还有其他替代方法,或者在MySQL中,我们可以从中获得相同功能的任何其他方法? 问题答案: 排序和限制结果: