我正在开发自定义ORM,这是一个简化示例来演示此问题:
__call
那么为什么在Foo内部调用相同的方法会触发Foo2
并在__callStatic
内触发{{1}}?
答案 0 :(得分:1)
这是因为在第一次调用中,您返回Null
,在对象上下文中。因此,它正在调用__call()
而不是__callStatic()
。
编辑:在第一种情况下,Foo :: getBar()在类Foo的实例范围内调用,因此Foo :: getBar()实际上与(实例)相同 - > getBar()当然不是静态调用。
EDIT2:刚刚找到关于您的问题的问题+答案:Why does PHP prefer __call() to __callStatic()?