3
A
回答
2
如果你的意思是嵌套类,没有。我相信他们会在某一时刻被引入,但最终会被抛弃。
但是,如果这就是你所追求的,那么支持namespace。
0
不,类不是PHP中的一等公民,因此它们不能存储在变量中。
你可能有点让通过功能的传中您最一流的
class Parent_Class
{
public static $childClass;
public static function callChildMethod($methodName, array $args=array())
{
return call_user_func_array(array(self::$childClass, $methodName), $args);
}
}
class Child_Class
{
public static function hello()
{
echo 'hello';
}
}
Parent_Class::$childClass = 'Child_Class';
Parent_Class::callChildMethod('hello');
+0
我认为他所说的是C#静态嵌套类型: http://msdn.microsoft.com/en-us/library/ ms173120(VS.80).aspx 它们不存储在变量中;他们只是通过他们的父类以静态方式访问。 – 2010-01-06 21:55:44
0
PHP不支持任何形式的(静态或其他方式)嵌套类。
1
号
但是,你可以使用PHP的魔术方法之一,做你想做的,也许是:
class ParentClass {
public static function __callStatic($method,$args) {
return call_user_func_array(array('ChildClass',$method),$args);
}
}
class ChildClass {
public static function childMethod() {
...
}
}
ParentClass::childMethod($arg);
0
是的,你可以有嵌套静态类在PHP中,但它不漂亮,并且需要一些额外的工作。语法与您的语法稍有不同。
诀窍是静态初始化外部类并创建内部类的静态实例。
然后你可以做两件事情之一,两者都在下面说明。
指的是内部类的静态实例(子类实际上是用词不当,因为没有继承关系。)
的内部类的实例创建一个静态访问方法(这是优选的,因为它允许发现。)
class InnerClass {
public static function Member_function() {
echo __METHOD__;
}
}
class OuterClass {
public static $innerClass;
public static function InnerClass() {
return self::$innerClass;
}
public static function init() {
self::$innerClass = new InnerClass();
}
}
OuterClass::init();
OuterClass::$innerClass->Member_function();
OuterClass::InnerClass()->Member_function();
相关问题
- 1. 静态与非静态堆栈
- 2. 在堆栈跟踪中获取被调用的静态类名
- 3. 在PHP中堆栈和堆?
- 4. 堆栈溢出和静态数组
- 5. 为什么不能将静态类变量分配给堆栈?
- 6. 动态堆栈
- 7. 静态,堆栈和堆分配如何不同?
- 8. Python是否有静态对象,堆栈对象和堆对象?
- 9. 静态,堆栈和堆内存分配的地址排序?
- 10. Java,堆栈类
- 11. TinyMCE堆栈类
- 12. PHP中的静态类
- 13. 静态变量在PHP类
- 14. 堆栈中的PHP回声?
- 15. 如何使我的堆栈类动态
- 16. 静态VS堆栈动态共享内存
- 17. 堆栈在java中使用堆栈
- 18. 堆栈VS堆带类
- 19. 堆栈PHP代码?
- 20. PHP数组堆栈调用类?
- 21. 如何在php中应用静态类
- 22. 如何在PHP中创建静态类
- 23. 堆栈的polymorphed类
- 24. 继承堆栈类
- 25. 堆栈使用类
- 26. 堆栈vs堆栈内存使用情况C++用于动态创建的类
- 27. 如何创建一个将当前类静态添加到堆栈的ASM LdcInsnNode?
- 28. 活动堆栈状态
- 29. 使堆栈“动态”(C)
- 30. 动态堆栈分配
是啊,我基本上试图用静态类代替名称空间;我真的很讨厌\ char作为一个命名空间分隔符..:P – Ian 2010-01-07 14:17:17