PHP类中public、private和protected的区别

在PHP中,如果在属性和方法前如果不加public、private或者protected修饰词,默认是使用public。
public:本类、子类和类外部都可以访问;
private:只在本类中可以访问,子类和外部都不可以访问;
protected:本类和子类中可以访问,类外部不能访问;
例如:

class Father
{
	public $name = 'lily';
	private $age = 18;
	protected $school = '社会大学';
	public function introduce() {
		echo 'my name is ' . $this->name . ',';
		echo 'my school is ' . $this->school;
		echo 'my age is ' . $this->age . ',';
	}
	public function getName() {
		echo 'my name is ' . $this->name;
	}
	private function getAge() {
		echo 'my age is ' . $this->age';
	}
	protected function getSchool() {
		echo 'my school is ' . $this->school;
	}
}

class Child extends Father
{
	public function info() {
		echo 'my name is ' . $this->name .',';
		echo 'my school is ' . $this->school, ',';
		echo 'my age is ' . $this->age;
	}
}
// 实例化
$a = new Father();
$a->introduce();			// my name is lily,my school is 社会大学,my name is 18
$a->getAge();				// Call to private method Father::getAge() from context '' in
$a->getSchool();			// Call to protected method Father::getSchool() from context '' in
Father::getSchool();	 	//Call to protected method Father::getSchool() from context '' in
Father::$age;				// Cannot access private property Father::$age in
// 实例化子类
$b = new Child();
$b->getName();		// my name is lily
$b->getAge();		// Call to private method Father::getAge() from context '' in
$b->getSchool(); 	// Call to protected method Father::getSchool() from context '' in
$b->info();			 // my name is lily,my school is 社会大学,<b>Notice</b>:  Undefined property: Child::$age in

从上面的示例可以看出:
introduce方法里面调用了Father类的3个属性,从输出结果看,如果是在类本身里面去访问带有public\private\protected修饰词的属性和方法是都可以访问到的;
在类外部,不管是实例化还是静态去调用private方法getAge(),和protected方法getSchool()是访问不到的,只能在类的内部访问;
子类中info方法调用到了父类的3个属性,输出结果只有public属性name和protected属性school,输出private属性age时会报提示错误:未定义的属性;info是子类Child的公共方法,访问school属性的时候是在类内部完成的,所以可以访问到protected属性;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值