如何在PHP中签入我是否处于静态上下文中(或不处于静态上下文中)?
有没有办法检查方法是静态调用的还是在实例化对象上调用的?
有没有办法检查方法是静态调用的还是在实例化对象上调用的?
请尝试以下操作:
class Foo {
function bar() {
$static = !(isset($this) && $this instanceof self);
}
}
来源:seancoates.com 通过谷歌
“从debug_backtrace()”中挖掘出来并不是太多的工作。debug_backtrace() 有一个 'type' 成员,如果调用是静态的,则为 '::',如果不是,则为 '->'。所以:
class MyClass {
public function doStuff() {
if (self::_isStatic()) {
// Do it in static context
} else {
// Do it in object context
}
}
// This method needs to be declared static because it may be called
// in static context.
private static function _isStatic() {
$backtrace = debug_backtrace();
// The 0th call is to _isStatic(), so we need to check the next
// call down the stack.
return $backtrace[1]['type'] == '::';
}
}