在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();