2019-07-23 类的封装性
2019-07-24 09:19:10来源:博客园 阅读 ()
类的封装性,简单来说就是在属性和方法前加了一个限定词,在php中有三个限定词:public(公共的)、protected(被保护的)、private(私有的),如果属性前加了任何一个限制词var要省略。它们具体有什么区别呢?它们的关系又是什么呢?下面做一个解析。
首先来看一个表格:
public | protected | private | |
类中 | 可以被访问 | 可以被访问 | 可以被访问 |
类外 | 可以被访问 | ||
子类 | 可以被访问 | 可以被访问 |
上面的表格已经可以让我们对这三个属性做一个清楚地认知,下面通过实例简述:
1.public(公共的)
class Person{ public $name; public $age; public $sex; public function say() { echo "My name is ".$this->name.". I am ".$this->age." years old.".$this->sex." in sex."; } } $obj = new Person(); $obj->name = "ZhangSan"; $obj->age = "20"; $obj->sex = "male"; $obj->say();
输出结果为:My name is ZhangSan. I am 20 years old.male in sex.
//继承 class Student extends Person{ public function sing() { echo "My name is ".$this->name.". I am ".$this->age." years old.".$this->sex." in sex."; } } $obj1 = new Student(); $obj1->name = "ZhangSan"; $obj1->age = "20"; $obj1->sex = "male"; $obj1->sing();
输出结果为:My name is ZhangSan. I am 20 years old.male in sex.
可以看到,无论是在外部还是在继承中,public 属性都可以被访问到。还要注意一点,如果不加任何限定词,默认限定词即为public。
2.protected(受保护的)
我们把上个例子当中的方法设为受保护的,试一下在类外能否被访问到:
class Person{ public $name; public $age; public $sex; protected function say() { echo "My name is ".$this->name.". I am ".$this->age." years old.".$this->sex." in sex."; } } $obj = new Person(); $obj->name = "ZhangSan"; $obj->age = "20"; $obj->sex = "male"; $obj->say();
输出结果是会报错:Fatal error: Call to protected method Person::say() from context '';提示我们在类外是不能访问受保护的方法的。
class Person{ protected function say() { echo "我是父类"; } } //子类继承父类 class Student extends Person{ function sing() { //调用父类受保护的方法 echo $this->say(); } } $obj = new Student(); $obj->sing();
输出结果为:我是父类。说明继承的子类可以调用父类中受保护的方法。
3.private(私有的)
看名字我们就大概可以看到,这个限制词把属性和方法限制成类私有的,所以在类外部和子类中都是不可访问的。
class Preson{ private function say(){ echo "我是父类"; } } $obj = new Preson(); $obj->say();
输出结果为报错:Fatal error: Call to private method Preson::say() from context '';
在继承中怎么样呢?
class Preson{ private function say(){ echo "我是父类"; } } class Student extends Preson { function sing() { echo $this->say(); } } $obj = new Student(); $obj->sing();
输出结果为报错:Fatal error: Call to private method Preson::say() from context '';
子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
原文链接:https://www.cnblogs.com/zhangxu-fasu/p/11232587.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Php教学视频-共300G
- PHP类的封装与继承详解 2019-12-15
- 2019-07-23 static 和 const 关键字的应用 2019-07-24
- 2019-07-23 用类写一个简单验证码 2019-07-24
- 2019-07-23 php魔术方法 2019-07-23
- PDO简单的DB类封装 2019-07-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash