加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 确定静态方法是静态调用还是作为实例方法调用

发布时间:2020-12-13 17:51:55 所属栏目:PHP教程 来源:网络整理
导读:在 PHP中,可以调用静态方法,就好像它们是实例方法一样: class A { public static function b() { echo "foo"; }}$a = new A;A::b(); //foo$a-b(); //foo 有没有办法确定b()内部是否静态调用该方法? 我尝试了isset($this),但在两种情况下都返回false,而debu
在 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修饰符,仍然可以通过class :: method()调用方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读