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()中

在PHP中调用静态方法时,可以判断该方法是否在实例化对象中运行吗

差不多

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静态方法要快得多。