在PHP中堆栈静态类

时间:2010-01-06 21:36:00

标签: php static function class

有没有办法在静态类中创建另一个静态类作为成员?

E.G。 Parent_Class::Child_Class::Member_function();

5 个答案:

答案 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中使用嵌套的静态类,但它并不漂亮,而且还需要一些额外的工作。语法与您的语法略有不同。

诀窍是静态初始化外部类并创建内部类的静态实例。

然后你可以做两件事之一,两者都在下面说明。

  1. 引用内部类的静态实例(子类实际上是用词不当,因为没有继承关系。)

  2. 为内部类的实例创建静态访问器方法(这是优选的,因为它允许发现。)

  3.   

    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不支持任何形式的嵌套类(静态或其他)。