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 应该是随便的...
我这里的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条件参数为数组