在PHP中堆叠静态类
有没有一种方法可以创建一个静态类,其中有另一个静态类作为成员在PHP中堆叠静态类,php,static,function,class,Php,Static,Function,Class,有没有一种方法可以创建一个静态类,其中有另一个静态类作为成员 例如,Parent_Class::Child_Class::Member_function()如果你指的是嵌套类,则不是。我相信它们会在某个时候被引入,但最终会被删除 但是,如果您所追求的是支持的话,那么也有支持。不,类在PHP中不是一等公民,因此它们不能存储在变量中 您可以在最外层的类中创建一个传递函数 class Parent_Class { public static $childClass; public s
例如,
Parent_Class::Child_Class::Member_function()代码>如果你指的是嵌套类,则不是。我相信它们会在某个时候被引入,但最终会被删除
但是,如果您所追求的是支持的话,那么也有支持。不,类在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' );
PHP不支持任何形式的嵌套类(静态或其他形式)。否
但是,您可以使用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);
是的,在PHP中可以有嵌套的静态类,但它并不漂亮,而且需要一些额外的工作。语法与您的略有不同
诀窍是静态初始化外部类并创建内部类的静态实例
然后,您可以执行以下两种操作之一,如下所示
引用内部类的静态实例(子类实际上用词不当,因为没有继承关系)
为内部类的实例创建一个静态访问器方法(这更可取,因为它允许发现)
我认为他所说的是嵌套类型,就像C#一样:它们不存储在变量中;它们只是通过它们的父类以静态的方式进行访问;我非常讨厌\char作为名称空间分隔符..:P
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();