【发布时间】:2016-06-26 10:06:10
【问题描述】:
考虑一个静态类(私有构造函数,只有静态方法和变量)。
现在粗略的类定义如下所示:
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");
【问题讨论】:
-
B::A::test()会做什么,A::test()不会...?! -
我仍然不明白应该有什么区别。让我们这样说:您显示的语法不存在,因此没有内在含义。你试图在这里发明一些新的操作,或者用一个错误的解释来驱动一些现有的操作。请更详细地解释这应该导致什么以及为什么只是
A::test()没有削减它。 -
为什么要通过另一个静态类调用一个静态类?这不是滥用静态类的目的吗?为了更容易在其他类中实例化它(使其抽象以便于使用)。
-
那么
B::A是否总是引用class A?或者您的意思是B的const或static属性应该引用另一个类,并且您想调用该类的方法,动态解析该类? -
顺便说一句,到那时你应该停止使用静态并只实例化你的类...
标签: php static static-methods static-classes