php中的$this和self

在PHP的类定义中,常用$this代表该类实例化的对象,但是$this表示的是当前对象,他代表的值屈居于当前方法执行的对象环境。所以,某个方法内的$this,不一定是当前方法所属类的对象。

class B {
	private $b_p='private';
	private $p_test='B-class';
	public function b_say(){
		echo $this->b_p;
	}
	public function b_echo(){
		echo $this->p_test;
	}
}


class A extends B{
	private $p_test='A-class';
	public function a_say(){
		echo $this->b_p;
	}
	public function a_echo(){
		echo $this->p_test;
	}
}

$o=new A;
/*在子类和父类中,如果存在同名的私有属性,那么在访问时,在父类访问的是父类中定义的私有属性,而在子类中访问的是子类中定义的私有属性*/
var_dump($o->b_echo());//输出 <span style="font-family: Arial, Helvetica, sans-serif;">'A-class'</span>
而self在类的定义中一般是指该类本身,一般在静态方法的声明时使用 。self是写在哪个类中,表示哪个类的对象

class C{
	public static $title='c-class';
	public static function sayTitle(){
		echo self::$title;
	}

}
class D extends C{
	public static $title='d-class';
	public static function getTitle(){
		echo self::$title;
	} 
}

D::sayTitle();//输出c-class  
由上例可知 当用类D调用方法sayTitle();返回的是c-title,所以self是写在哪个类中,代表的是哪个类 与谁调用的该方法没有关系

为了解决哪个类调用 应该使用哪个类的静态成员的问题 PHP中引入了静态延迟绑定的概念

self关键字所表示的类, 在编译时已经确定 在执行时不能修改 静态延迟绑定是推迟确定self的值  实现的方式是采用static关键字替代self关键字

class C{
	public static $title='c-class';
	public static function sayTitle(){
		echo self::$title;
	}
	public static function comeTitle(){
		echo static::$title;
	}

}
class D extends C{
	public static $title='d-class';
	public static function getTitle(){
		echo self::$title;
	} 
}

D::comeTitle();//输出 'd-class'
D::sayTitle()//输出'c-class'




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值