详细解读PHP类的封装

开发 后端
我们在这篇文章中主要为大家介绍了PHP类的封装的相关知识。希望新手们通过本文介绍的内容能够加深对PHP语言的理解程度。

PHP类的封装对于初学者来说是比较难懂的,在我们学习这方面的知识之前,首先要讲到的是PHP中的public、protected与private修饰符,可能在之前的代码中你已经见识过public这个修饰符,但是我们还并不懂这其中的奥秘,在接下来让我们看看吧。#t#

public:方法或者属性在任何作用域都可以访问到,而且这是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。

protected:方法或者属性只能从类或者继承类的一个成员中访问到。

private:方法或者属性只能从类的一个成员中访问到,而且无法从继承类的成员中访问到。经过private标记的方法或者属性可以在继承类中重新定义。每一个类只能看到它自己定义的私有方法。

这三个修饰符从作用范围上来讲应该像这样从大到小排序:

public→protected→private之所以说是在作用范围上是因为类跟我们之前的函数一样,把一些属性和方法进行了PHP类的封装。这个封装就决定了数据的“可见性”了,这样我们在类的外面不能够随意修改所定义的属性和方法而只能够进行调用,这就是封装的好处,同时也提高了安全性。为了说明这几个修饰符的作用,请看如下代码:

 

  1. < ?php   
  2. class myClass{   
  3. public $public="Public";   
  4. protected $protected="Protected";   
  5. private $private="Private";   
  6. function say_Hello(){   
  7. //我现在什么也不做,等下再告诉你   
  8. }   
  9. }   
  10. $obj=new myClass();   
  11. echo $obj->public;   
  12. //echo $obj->protected;   
  13. //echo $obj->private;   
  14. ?>   
  15. < ?php  
  16. class myClass{  
  17. public $public="Public";  
  18. protected $protected="Protected";  
  19. private $private="Private";  
  20. function say_Hello(){  
  21. //我现在什么也不做,等下再告诉你  
  22. }  
  23. }  
  24. $obj=new myClass();  
  25. echo $obj->public;  
  26. //echo $obj->protected;  
  27. //echo $obj->private;  
  28. ?>   

 

通过运行以上示例我们得到一个“Public”,但当你把//echo $obj->private;的注释去掉时,你会得到一下如下的错误:Fatal error: Cannot access protected property myClass::$protected in E:\apache\htdocs\example\file.php on line 13。

可以看到我们不能随意去访问类的属性定义,也就是我们不能去修改PHP类的封装中已经定义的一些操作,这就是可见性了。我们在“外面”是不知道这个类中到底有那些成员,因为这些成员对于其他的类可能是不可见的。

当然如果我们一定要访问或者修改定义为“私有”的属性时,也可以使用PHP所提供的系统方法:_get()和_set()。关于这个在以后再来了解,因为现在我对此也只是有个了解啦。
 

责任编辑:曹凯 来源: helpphp.cn
相关推荐

2009-12-11 18:05:39

PHP链接WEB SE

2009-12-01 19:28:16

PHP模板

2009-12-01 17:25:16

PHP $_FILES

2009-12-02 16:31:54

PHP发送邮件

2009-12-08 10:00:36

PHP比较运算符

2009-12-10 09:48:26

PHP获取远程图片

2009-12-08 16:48:25

PHP类phpExce

2009-12-08 14:11:03

PHP时区修改

2009-12-02 10:49:59

PHP解析XML元素结

2009-12-11 15:35:50

PHP弹出对话框

2009-12-02 14:55:46

PHP抽象类abstr

2009-12-11 14:39:41

PHP函数mysql_

2009-12-11 16:28:20

PHP统计图表类

2009-12-04 15:28:36

PHP JSON类库

2024-07-29 00:01:00

2022-08-26 07:33:49

内存JVMEntry

2010-05-12 10:35:19

路由交换

2012-07-02 14:39:59

架构敏捷

2010-01-07 13:17:35

JSON变量

2012-03-31 10:59:02

ASP.NET
点赞
收藏

51CTO技术栈公众号