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 呢?
展开
 我来答
匿名用户
2015-08-29
展开全部
  1. 首先说明一下,如果使用静态调用,必须声明是static函数,A::bb(); 这样调用,那么bb函数应该这样写public static function bb() ,在高版本的php会更严谨,你这种不加static写法是错误的;

  2. 双冒号::静态调用,就是不初始化类的变量,比如__construct()和public $d=88;
    都是不会执行的,静态方法就像一个普通的函数;

  3. $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时,可以不用实例化的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式