有没有办法在静态类中创建另一个静态类作为成员?
E.G。 Parent_Class::Child_Class::Member_function();
答案 0 :(得分:2)
如果你的意思是嵌套类,没有。我相信它们会在某一时刻被引入,但最终会被淘汰。
但是,如果那就是您所追求的目标,那么会有namespace支持。
答案 1 :(得分: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);
答案 2 :(得分:1)
是的,您可以在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();
答案 3 :(得分: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' );
答案 4 :(得分:0)
PHP不支持任何形式的嵌套类(静态或其他)。