我从未见过这样的代码:
public static function getInstance()
{
if ( ! isset(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
一样new className()
吗?
编辑
如果该类是继承的,它指向哪个类?
self
指向其编写所在的类。
因此,如果您的getInstance方法位于类名中MyClass
,则以下行:
self::$_instance = new self();
将做与:
self::$_instance = new MyClass();
编辑:评论后,还有更多信息。
如果您有两个相互扩展的类,则有两种情况:
getInstance
在子类中定义getInstance
在父类中定义第一种情况看起来像这样(在此示例中,我已经删除了所有不必要的代码-您必须将其重新添加来获得单例行为)*:
class MyParentClass {
}
class MyChildClass extends MyParentClass {
public static function getInstance() {
return new self();
}
}
$a = MyChildClass::getInstance();
var_dump($a);
在这里,您将获得:
object(MyChildClass)#1 (0) { }
意思self
是MyChildClass
-即编写它的类。
对于第二种情况,代码如下所示:
class MyParentClass {
public static function getInstance() {
return new self();
}
}
class MyChildClass extends MyParentClass {
}
$a = MyChildClass::getInstance();
var_dump($a);
这样您会得到以下输出:
object(MyParentClass)#1 (0) { }
这意味着self
手段MyParentClass
-即在这里也一样, 在其所在的班级 。
在PHP <5.3中,“编写它的类”很重要-有时会引起问题。
这就是PHP 5.3为static
关键字引入新用法的原因:现在可以在我们self
在这些示例中使用的位置准确使用它:
class MyParentClass {
public static function getInstance() {
return new static();
}
}
class MyChildClass extends MyParentClass {
}
$a = MyChildClass::getInstance();
var_dump($a);
但是,使用static
代替self
,您现在将获得:
object(MyChildClass)#1 (0) { }
这意味着static
指向使用 的类 (我们使用MyChildClass::getInstance()
),而不是指向其中 的类 。
当然,的行为self
没有改变,不会破坏现有的应用程序-PHP 5.3刚刚添加了新的行为,回收了static
关键字。
而且,说到PHP 5.3,您可能想看看PHP手册的Late Late
Bindings
页面。
我最近偶然发现了这个代码: 我以前从未见过这个关键字。试图运行我得到的代码 分析错误:语法错误,第x行出现意外的T_变量 那么这个关键字是什么?它甚至是有效的PHP吗?如果是,我该如何使用它?
我想创建一个
问题内容: 在一个JavaScript文件中,我看到了: 声明并分配给它的目的是什么? 问题答案: 我将以一个插图开始这个答案: 我的回答最初是用jQuery演示的,只是略有不同: 由于在通过调用新函数更改范围时会经常更改,因此无法使用原始值访问原始值。将其别名为可以使您仍然访问的原始值。 就个人而言,我不喜欢使用as作为别名。它指的是什么几乎是不明显的,特别是如果函数长于几行。我 总是 使用更具
问题内容: 这是什么? 这是有关警告,错误和注意事项的许多答案,这些警告,错误和注意事项在您对PHP进行编程时可能会遇到,并且不知道如何解决它们。这也是一个社区Wiki,因此邀请所有人参与添加并维护此列表。 为什么是这样? 诸如“已发送标题”或“呼叫非对象成员”之类的问题经常在堆栈溢出中弹出。这些问题的根本原因总是相同的。因此,这些问题的答案通常会重复它们,然后向OP显示在特定情况下应更改的行。这
我最近看到新的Gmail API宣布吹嘘OAuth 2.0用户身份验证。 我有点担心,因为在我们的企业Google Apps域中,我已经使用XOAUTH2与Gmail集成。(从本质上讲,XOAUTH2 包括对 IMAP 身份验证的 OAuth 2.0 支持)。 我应该担心吗? 新的Gmail API是否意味着XOAUTH2的终结开始?
问题内容: 下面是代码片段。 有人可以向我解释@符号在Java中的含义吗? 问题答案: 这是一个注释。 注释是元数据的一种形式。它们提供的程序数据不属于程序本身。注释对其注释的代码的操作没有直接影响。 注释确实会影响工具和库对待程序的方式,进而会影响正在运行的程序的语义。可以从源文件,类文件中读取注释,也可以在运行时从中读取注释。