Why does PHP prefer __call() to __callStatic()?

Jul*_*mur 6 php

When I try this :

<?php
class myParent {
    public function __call($method, $params) {
        echo "from __call";
    }

    public function __callStatic($method, $params) {
        echo "from __callStatic";
    }
}

class mySon extends myParent {
    public function bar() {
        myParent::foo();
    }
}

(new mySon())->bar();
Run Code Online (Sandbox Code Playgroud)

I expect this output : from __callStatic ...

Instead it gives : from __call.

有人可以解释一下为什么吗?


编辑:确切地说,我想知道为什么如果删除该__call函数,它就会触发__callStatic,以及是否有办法__callStatic__call声明时触发。

Sjo*_*jon 4

这里发生了两件事,首先:PHP 支持classname::method作为 的别名parent::method以及跳过树中某些类的方法,如此处所示

其次,parent::不是静态调用,并且不可能使用 或 静态调用父级上的parent::方法classname::。我实际上打开了一个错误报告,但这并没有触发任何开发人员对此进行改进。

这两种情况结合起来会导致您看到的非直观行为