0%

PHP 的 __call 和 __callStatic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Foo
{
public function __call($name, $arguments)
{
echo 1;
}

public static function __callStatic($name, $arguments)
{
echo 2;
}

public function bar()
{
Foo::abc();
}
}

(new Foo)->bar();

结果是 1 还是 2?答案是 1

接下来解释一下:

  1. __call 方法关注方法能否被访问到,而不仅仅是关注是否存在
  2. __callStatic 方法关注的是方法能否被静态的访问到,而不是关注方法是否存在,是否是静态方法。
  3. 具体执行 __call__callStatic ,是根据调用的上下文。如