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()调用方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |