php 通过类名调用方式不理解? 50
classA{public$d=88;publicfunctionaa(){$this->bb();A::bb();//此处不理解;通过类调用的普通bb()方法,里,$t...
class A{
public $d=88;
public function aa(){
$this->bb();
A::bb(); //此处不理解;通过类调用的普通 bb() 方法,里,$this是从哪来的这里还可以写成 self::bb();
}
public function bb(){
echo $this->d; //如果用 类名方式 A::bb() 调用的话, $this 怎么来的。
}
}
$a=new A();
$a->aa();
在类内部普通方法里,通过类名调用普通方法 ,不理解。
如果在方法里 用 $this->bb() 这个能理解,就是 $this 代表的是 $a对象,
如果在方法里 用 A::bb() 这种类名调用方式的话 bb()方法里的 $this 是怎么变成 $a 对象的
我只理解:哪个对象调用的 bb()方法 ,在方法体里 $this 就代表哪个对象。但是如果用类的方式去访问,就弄不懂了。怎么传过去的$this 呢? 展开
public $d=88;
public function aa(){
$this->bb();
A::bb(); //此处不理解;通过类调用的普通 bb() 方法,里,$this是从哪来的这里还可以写成 self::bb();
}
public function bb(){
echo $this->d; //如果用 类名方式 A::bb() 调用的话, $this 怎么来的。
}
}
$a=new A();
$a->aa();
在类内部普通方法里,通过类名调用普通方法 ,不理解。
如果在方法里 用 $this->bb() 这个能理解,就是 $this 代表的是 $a对象,
如果在方法里 用 A::bb() 这种类名调用方式的话 bb()方法里的 $this 是怎么变成 $a 对象的
我只理解:哪个对象调用的 bb()方法 ,在方法体里 $this 就代表哪个对象。但是如果用类的方式去访问,就弄不懂了。怎么传过去的$this 呢? 展开
1个回答
2015-08-29
展开全部
首先说明一下,如果使用静态调用,必须声明是static函数,A::bb(); 这样调用,那么bb函数应该这样写public static function bb() ,在高版本的php会更严谨,你这种不加static写法是错误的;
双冒号::静态调用,就是不初始化类的变量,比如__construct()和public $d=88;
都是不会执行的,静态方法就像一个普通的函数;$this是当前实例化的对象,就是$a=new A;中$a就是当前$this.
更多追问追答
追问
如果是调用静态方法,我一直理解,但是,就是调用非静态的时候,不理解,比如,在子类的构造方法里,调用父累的构造方法,也是用的类名::父累的构造方法,并且父累的构造方法,也不是静态
追答
一,this
1,要用this,你必须实例化对象,不然它会报错的,Fatal error: Using $this when not in object context。
2,this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性
二,self
1,self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。
2,用self时,可以不用实例化的
三,parent
1,parent可以访问父类中的静态属性和静态方法。
2,用parent时,可以不用实例化的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询