PHP: 是否可以从另一个静态 class 调用静态 class 方法?
PHP: is it possible to call a static class method from another static class?
考虑静态 class(私有构造函数,只有静态方法和变量)。
现在粗略的 class 定义如下所示:
class A{
private function __construct(){}
public static test(){};
}
class B{
private function __construct(){}
}
是否可以通过某种方式调用 B::A::test()
之类的东西?
或者可能通过一个变量?像 B::$A::test()
?
这样的东西
我想通过一些通用的呼叫捕获是可能的,但我想不出来...
重要提示: 另外,我想从 B
调用任何其他静态 class,而不仅仅是从 A
class...
EDIT2: 我想要实现的是通过另一个静态 class 调用静态 class,如果可能...非常类似于调用一个来自对象变量的方法 - 但静态 class (显然)不是要实例化的方法。
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()
这本质上只是调用变量 class 名称上的静态方法的语法。没有更好的捷径。
请注意,我认为这样的模式没有多大意义,您的 class 设计在这一点上 过于静态 。您应该实例化您的 classes 并调用 $b->a->test()
,这为您的应用程序设计提供了更大的灵活性。实际上 B::A
是 硬编码的 ,它不会是 'A'
以外的任何东西,所以你最好直接写 A::test()
。
如果您使用 public static
属性 而不是 const
可能 在运行时发生变化,您现在引入 全局状态 进入您的应用程序,这也是不可取的。
从另一个class
的静态函数调用class的静态函数
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'
考虑静态 class(私有构造函数,只有静态方法和变量)。
现在粗略的 class 定义如下所示:
class A{
private function __construct(){}
public static test(){};
}
class B{
private function __construct(){}
}
是否可以通过某种方式调用 B::A::test()
之类的东西?
或者可能通过一个变量?像 B::$A::test()
?
我想通过一些通用的呼叫捕获是可能的,但我想不出来...
重要提示: 另外,我想从 B
调用任何其他静态 class,而不仅仅是从 A
class...
EDIT2: 我想要实现的是通过另一个静态 class 调用静态 class,如果可能...非常类似于调用一个来自对象变量的方法 - 但静态 class (显然)不是要实例化的方法。
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()
这本质上只是调用变量 class 名称上的静态方法的语法。没有更好的捷径。
请注意,我认为这样的模式没有多大意义,您的 class 设计在这一点上 过于静态 。您应该实例化您的 classes 并调用 $b->a->test()
,这为您的应用程序设计提供了更大的灵活性。实际上 B::A
是 硬编码的 ,它不会是 'A'
以外的任何东西,所以你最好直接写 A::test()
。
如果您使用 public static
属性 而不是 const
可能 在运行时发生变化,您现在引入 全局状态 进入您的应用程序,这也是不可取的。
从另一个class
的静态函数调用class的静态函数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'