在PHP中,静态方法可以像实例方法一样被调用:
class A {
public static function b() {
echo "foo";
}
}
$a = new A;
A::b(); //foo
$a->b(); //foo
有没有办法确定b()
内部是否静态调用该方法?
我已尝试isset($this)
但在两种情况下都返回false,而debug_backtrace()
似乎表明这两个调用实际上都是静态调用
array(1) {
[0]=>
array(6) {
["file"]=>
string(57) "test.php"
["line"]=>
int(23)
["function"]=>
string(1) "b"
["class"]=>
string(1) "A"
["type"]=>
string(2) "::"
["args"]=>
array(0) {
}
}
}
Foo
array(1) {
[0]=>
array(6) {
["file"]=>
string(57) "test.php"
["line"]=>
int(24)
["function"]=>
string(1) "b"
["class"]=>
string(1) "A"
["type"]=>
string(2) "::"
["args"]=>
array(0) {
}
}
}
答案 0 :(得分:3)
isset
技巧仅在您未明确声明方法为static
时才有效。 (因为这正是将 - >对象调用转换为静态调用的原因。)
如果不使用静态修饰符,仍然可以通过class::method()
调用方法。