在 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) {
}
}
}
最佳答案
isset
技巧仅在您未将方法显式声明为 static
时才有效。 (因为这正是将 -> 对象调用变成静态调用的原因。)
如果您不使用 static 修饰符,仍然可以通过 class::method()
调用方法。
关于php - 判断一个静态方法是被静态调用还是作为实例方法被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484199/