当前位置:编程学习 > php >>

PHP 类怎么判断调用方法

class R{
 function a(){
  
 }
}
class X{
 function b(){
  R::a();
 }
}
$A = new X;
$A ->b();

我这里的R是静态调用

 

但是是通过实例化后的X进行访问的~所以也会有$this变量

 

本来用isset就可以解决的~可是现在...

 

各位大大..有什么办法能获取R::a的调用方法?(也就是判断a函数是否是被静态调用..)

追问:默认的是public吧~public 应该是随便的...
答案:给个例子 好好理解下吧

 

例:<?php
class A
{
      function foo()
      {
          if (isset($this)) {
              echo '$this is defined (';
              echo get_class($this);
              echo ")\n";
          } else {
              echo "\$this is not defined.\n";
          }
      }
}

class B
{
      function bar()
      {
        A::foo();
         //parent::foo();
      }
}

$a = new A();
$a->foo();//动态调用,因为new了对象
A::foo();//静态调用,直接用类名去调用,没有new对象
$b = new B();
$b->bar();//在对象$b中,A::foo();进行静态调用
B::bar();
?>
总结:静态、动态调用都指类、对象对其方法的调用,动态指的是创建(new)了对象,然后用对象变量去调用方法;静态则是没有创建对象,直接用类名去调用。至于另一个对象那就很简单了,不同的类创建不同的对象,比如class A;class B ,$a = new A();$b = new B();$a and $b 相对之间就是另一个对象了。
延伸:伪变量 $this 通常未定义,如果其所在的方法是被静态调用的话。但这不是个严格规定:如果一个方法被从另一个对象内静态调用的话,则 $this 会被定义。此时 $this 的值是那个发出调用的对象。

你的a不static能用::调用?
如果一个方法被从另一个对象内静态调用的话,则 $this 会被定义。此时 $this 的值是那个发出调用的对象。

上一个:关于PHP的一段代码
下一个:php sql条件参数为数组

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,