我对 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
语言结构的大图。或者它完全是一种新的语言结构。