Php 说明对象是否在静态方法中实例化?
在PHP中调用静态方法时,可以判断该方法是否在实例化对象中运行吗 差不多Php 说明对象是否在静态方法中实例化?,php,object,Php,Object,在PHP中调用静态方法时,可以判断该方法是否在实例化对象中运行吗 差不多 public static function update( $value = NULL) { if ( self::is_instantiated() ) { update_db($this->value); } else { update_db($value); } } 我不想简单地测试!是null($value),因为该方法可以在不传递值的情况下公开调用 我尝试检查isset()中
public static function update( $value = NULL) {
if ( self::is_instantiated() ) {
update_db($this->value);
} else {
update_db($value);
}
}
我不想简单地测试!是null($value)
,因为该方法可以在不传递值的情况下公开调用
我尝试检查
isset()
中的$this
和$this->property
,但在非对象上下文中不起作用。只需删除static
关键字。静态方法总是静态的
class A {
public function whoami() {
echo $this ? "i am object\n" : "i am class\n";
}
}
$a = new A();
$a->whoami();
A::whoami();
结果:
i am object
i am class
你明白你的意思了吗?在静态方法的上下文中,实际上没有$this。如果您与任何对象断开连接,您可以尝试在任何调用中发送$this的引用,并查看它是否存在。默认情况下,即使遇到这种情况,设计是否很糟糕?只是问一下。@Yoshi可能是的,因为我没有受过教育,但现在我已经想好了,我想启发我的想法,以便更全面地理解编码是如何工作的。我得到了
PHP注意:未定义变量:这是在PHP 5.6.13的test.PHP第4行的中用你的逐字代码得到的。我把行改成了echo@isset($this)?“我是对象”:“我是类”\n
那么关键字static
实际上是多余的吗?@user151841静态方法要快得多。