В 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) {
}
}
}