__callStatic(): 从静态上下文实例化对象?
我对PHP中的“静态”和“动态”函数和对象如何协同工作感到困惑,特别是在__callStatic()方面。
__callStatic() 的工作原理:
你可以有一个普通的类MyClass,在类中你可以放置一个名为__callStatic()的静态函数,只有当MyClass没有所需名称的静态函数时,才会调用它。
即我打电话
MyClass::newFunction();
newFunction()
静态调用,但不声明它。所以,然后被叫到里面,你可以说MyClass
__callStatic()
$myObject=new SomeOtherClass(); $myObject->newFunction();
它调用您想要的函数,但在其他对象上。
简短版本:
换句话说,__callStatic() 就是这样做的:
MyClass::newFunction();
它隐藏了这个:
(new SomeOtherClass())->newFunction();
现在说什么?看起来像从类调用静态函数的代码,结果是从其他类调用该函数并通过实例化而不是静态调用它。
请解释一下!
为什么要这样做?你能在其他地方做这样的事情吗,比如C++或Java?我正在寻找关于语言中静态和动态函数的简短而简洁但信息丰富的解释,在这种情况下,无论是__callStatic()还是语言结构的大局。还是完全是一种新的语言结构。violates
conforms