|
|
1
6
您的意思可能是稍微修改一下(否则我会得到一个语法错误):
这给出: 实例: (refcount=2,is_ref=1) , 对象 ( 独生子女 ) 一 ] 答: (refcount=1,is_ref=0) , 对象 ( 独生子女 ) 一 ] 实例: (refcount=2,is_ref=1) , 对象 ( 独生子女 ) 一 ] 乙: (refcount=1,is_ref=0) , 对象 ( 独生子女 ) 一 ] 因此它有一个缺点:每次调用都会创建一个新的zval。这不是特别严重,所以如果你喜欢,就去吧。
ZVAL分离被强制的原因是内部
|
|
|
2
10
使用类属性。有一些优势…
首先,执行自动化测试更容易。您可以创建一个模拟foo类来“替换”实例,以便依赖foo的其他类将获得模拟的副本,而不是原始的:
然后,在您的测试用例中(假设phpunit):
这就绕过了单身汉的共同抱怨,他们很难测试。
其次,它使代码更加灵活。如果您希望在该类的运行时“替换”该功能,您所需要做的就是将其子类化并替换
第三,它允许您在其他静态函数中对实例进行操作。对于单实例类(一个真正的单实例类),这不是什么大问题,因为您可以调用
另外一个注意事项是,我不会将构造函数设置为私有的。这将使其无法正确扩展或测试。相反,使它受到保护,这样您可以在需要时子类,并且仍然在父类上操作… |
|
|
3
0
最干净的解决方案是从类本身删除单例逻辑(因为它与类本身的作业无关)。 有关有趣的实现,请参见: http://phpgoodness.wordpress.com/2010/07/21/singleton-and-multiton-with-a-different-approach/ |
|
|
4
0
在一些游戏之后,我能想到的最好的方法是这样的: 创建一个名为singletonbase.php的文件,并将其包含在脚本的根目录中! 代码是
然后对于任何你想要创建一个单例的类,只需添加这个小的单例方法。
下面是一个小例子:
您可以在任何类中添加这个singleton函数,它将只为每个类创建一个实例。 你也可以这么做
在脚本的最后,如果你需要的话,你可以做一些数据挖掘, 在脚本的末尾,您可以
因此,对于调试器来说,该方法非常适合访问所有已初始化的类和对象状态。 |