我对此事有点困惑。我正在设计一个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中,我们可以从中获得相同功能的任何其他方法? 问题答案: 排序和限制结果: