繁体   English   中英

PHP:是否可以从另一个静态类调用静态类方法?

[英]PHP: is it possible to call a static class method from another static class?

考虑一个静态类(私有构造函数,只有静态方法和变量)。

现在粗略的类定义如下所示:

class A{
   private function __construct(){}
   public static test(){};
}
class B{
   private function __construct(){}
}

是否有可能以某种方式调用B::A::test()

或者也许通过一个变量? B::$A::test()

我想通过一些通用的电话捕捉是可能的,但我无法弄清楚......

重要提示:另外,我想从B调用任何其他静态类,而不仅仅是从A类...

EDIT2:我想要实现的是通过另一个静态类调用静态类,如果可能的话......非常类似于从对象变量调用方法 - 但静态类(显然)不被实例化。

EDIT3:也可能的解决方案是将其称为B::CLASSNAME_METHOD_NAME并通过__callStatic捕获它,但我宁愿这样做B::CLASSNAME::METHOD_NAME ...

另一种可能的解决方案:

如果您不想创建整个单例,这可能是解决方案-创建部分单例-某种单例-hepler,尽管使用->调用静态方法可能会令人困惑!

class AA{
    private function __construct(){}
    private static $instance;
    public function getInstance(){ return empty(self::$instance)?(new self()):self::$instance; }
    public function __call($method_name, $args) {
       return AA::$method_name($args);
    }
    public static function test($a, $b){
        echo "TEST: A:".$a." B:".$b; 
    }   
}

class B{
    private function __construct(){}
    public static function A(){
        return AA::getInstance();
    }
}

B::A()->test("one", "two");

您必须使用以下语法:

class B {
   const A = 'A';
}

$class = B::A;
$class::test()

这本质上只是在变量类名上调用静态方法的语法。 没有比这更好的捷径了。

请注意,我认为这样的模式没有多大意义,您的类设计在这一点上过于静态 您应该实例化您的类并调用$b->a->test() ,这为您的应用程序设计提供了更大的灵活性。 实际上B::A硬编码的,它不会是'A'以外'A'任何东西,所以你也可以直接编写A::test()
如果您不使用const而使用可能在运行时变化的public static属性,那么您现在将全局状态引入您的应用程序,这也是不可取的。

从另一个类的静态函数调用一个类的静态函数

class A{
   private function __construct(){}

   public static function test()
   { 
       echo 'from class A'; 
   }
}

class B{
   private function __construct(){}

    public static function test() 
    {
        return A::test();
    }
}

A::test(); //outputs 'from class A'
B::test(); //outputs 'from class A'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM