热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP学习笔记之面向对象设计

面向对象设计是php程序开发中一个很重要的内容块,如果你想成为高级php程序员我们必须知道面向对象设计具体用法与写法维护简单模块化是面

面向对象设计是php程序开发中一个很重要的内容块,如果你想成为高级php程序员我们必须知道面向对象设计具体用法与写法.

维护简单  模块化是面向对象编程中的一个特征.实体被表示为类和同一名字空间中具有相同功能的类,我们可以在名字空间中添加一个类而不会影响该名字空间的其他成员.

可扩充性  面向对象编程从本质上支持扩充性.如果有一个具有某种功能的类,就可以很快地扩充这个类,创建一个具有扩充的功能的类.

代码重用  由于功能是被封装在类中的,并且类是作为一个独立实体而存在的,提供一个类库就非常简单了.

它比较适合多人合作来开发项目,所以现在很多大中型网站都选择了用OOP来开发.本文主要讲解了用php做面向对象编程的最基本的方法和代码实例,如何创建一个class和如何生成一个class的实例等等,只是一个入门,非常的简单,要想深学这点是远远不够的.只适合php的初学者

public 表示全局,类内部外部子类都可以访问;

实例代码如下:

  1.       
  2.      class Test{ 
  3.          public  $name='Janking'
  4.                  $sex='male'
  5.                  $age=23; 
  6.           
  7.          function __construct(){ 
  8.              echo $this->age.''.$this->name.''.$this->sex.''
  9.          } 
  10.           
  11.           function func(){ 
  12.              echo $this->age.''.$this->name.''.$this->sex.''
  13.          } 
  14.      } 
  15.  
  16.  
  17.  $P=new Test(); 
  18.  echo ''
  19.  $P->age=100; 
  20.  $P->name="Rainy"
  21.  $P->sex="female"
  22.  $P->func(); 
  23.  ?>  

private表示私有的,只有本类内部可以使用;

实例代码如下:

  1.       
  2.      class Test{ 
  3.          private  $name='Janking'
  4.                  $sex='male'
  5.                  $age=23; 
  6.           
  7.          function __construct(){ 
  8.              $this->funcOne(); 
  9.          } 
  10.           
  11.           function func(){ 
  12.              echo $this->age.''.$this->name.''.$this->sex.''
  13.          } 
  14.           
  15.          private function funcOne(){ 
  16.              echo $this->age.''.$this->name.''.$this->sex.''
  17.          } 
  18.      } 
  19.  
  20.  
  21.  $P=new Test(); 
  22.  echo ''
  23.  $P->func(); 
  24.  $P->age=100;        // Cannot access private property Test::$age  
  25.  $P->name="Rainy";   // Cannot access private property Test::$name  
  26.  $P->sex="female";   // Cannot access private property Test::$female 
  27.  $P->funcOne();      // Call to private method Test::funcOne() from context '' 
  28.  ?> 

protected表示受保护的,只有本类或子类或父类中可以访问;

   - 数据抽象和信息隐藏 
   - 继承 
   - 多态性

在PHP中使用类进行封装的办法,实例代码如下:

  1. class Something {  
  2. // In OOP classes are usually named starting with a cap letter.  
  3. var $x
  4. function setX($v) {  
  5. // Methods start in lowercase then use lowercase to seprate  
  6. // words in the method name example getValueOfArea()  
  7. $this->x=$v;  
  8. function getX() {  
  9. return $this->x;  
  10. }  
  11. ?> 

当然你可以用你自己的办法,但有一个标准总是好的.

PHP中类的数据成员使用 "var" 定义,数据成员是没有类型直到被赋值.一个数据成员可能是一个 integer、数组、联合数组(associative array)或甚至对象(object). 方法在类里定义成函数,在方法里存取数据成员,你必须使用$this->name 这样的办法,否则对方法来说是一个函数的局部变量.

使用 new 来创建一个对象,实例代码如下:

  1. $obj = new Something;  

然后使用成员函数

实例代码如下:

  1. $obj->setX(5);  
  2. $see = $obj->getX();  

setX 成员函数将 5 赋给对象(而不是类)obj 中成员变量, 然后 getX 返回值 5.

你也可以用对象引用来存取成员变量,例如:$obj->x=6; 然而,这不一种好的面向对象编程的方法.我坚持你应使用成员函数来设置成员变量的值和通过成员函数来读取成员变量.如果你认为成员变量是不可存取的除了使用成员函数的办法,你将成为一个好的面向对象程序员. 但不幸的是PHP本身没有办法声明一个变量是私有的,所以允许糟糕的代码存在.

在 PHP 中继承使用 extend 来声明,实例代码如下:

  1. class Another extends Something {  
  2.  var $y;  
  3.  function setY($v) {  
  4.   // Methods start in lowercase then use lowercase to seperate  
  5.   // words in the method name example getValueOfArea()  
  6.   $this->y=$v;  
  7.  } 
  8.  function getY() {  
  9.   return $this->y;  
  10.  }  
  11. ?>  

这样类 "Another" 的对象拥有父类的所用成员变量及方法函数,再加上自己的成员变量及成员函数.如:

实例代码如下:

  1. $obj2=new Another;  
  2. $obj2->setX(6);  
  3. $obj2->setY(7);  

多重继承不被支持,所以你不能让一个类继承多个类.

在继承类中你可以重新定义来重定义方法,如果我们在 "Another" 重新定义 getX,那么我们不再能存取 "Something" 中的成员函数 getX. 同样,如果我们在继承类中声明一个和父类同名的成员变量,那么继承类的变量将隐藏父类的同名变量.你可以定义一个类的构造函数, 构造函数是和类同名的成员函数,在你创建类的对象时被调用.

实例代码如下:

  1. class Something {  
  2.  var $x
  3.  function Something($y) {  
  4.   $this->x=$y;  
  5.  } 
  6.  function setX($v) {  
  7.   $this->x=$v;  
  8.  } 
  9.  function getX() {  
  10.   return $this->x;  
  11.  }  
  12. ?> 

所以可以用如下方法创建对象:

实例代码如下:

  1. $obj=new Something(6);  

构造函数自动赋值 5 给成员变量 x, 构造函数和成员函数都是普通的PHP函数,所以你可以使用缺省参数.

实例代码如下:

  1. function Something($x="3",$y="5")  

然后,实例代码如下:

  1. $obj=new Something(); // x=3 and y=5  
  2. $obj=new Something(8); // x=8 and y=5  
  3. $obj=new Something(8,9); // x=8 and y=9  

省参数的定义方法和 C++ 一样,因此你不能传一个值给 Y 但让 X 取缺省值,实参的传递是从左到右,当没有更多的实参时函数将使用缺省参数.只有当继承类的构造函数被调用后,继承类的对象才被创建,父类的构造函数没有被调用,这是PHP不同其他面向对象语言的特点,因为构造函数调用链是面向对象编程的特点.如果你想调用基类的构造函数,你不得不在继承类的构造函数中显式调用它.这样它能工作是因为在继承类中父类的方法全部可用.

实例代码如下:

  1. function Another() {  
  2. $this->y=5;  
  3. $this->Something(); //explicit call to base class constructor.  
  4. ?> 

多态性,实例代码如下:

  1. function niceDrawing($x) {  
  2. //Supose this is a method of the class Board.  
  3. $x->draw();  
  4. $obj=new Circle(3,187);  
  5. $obj2=new Rectangle(4,5); 
  6. $board->niceDrawing($obj); //will call the draw method of Circle.  
  7. $board->niceDrawing($obj2); //will call the draw method of Rectangle. 
  8. ?> 

和封装有关的魔术方法:

 __set():是直接设置私有成员属性值时,自动调用的方法
 __get():是直接获取私有成员属性值时,自动调用的方法
 __isset(); 是直接isset查看对象中私有属性是否存时自动调用这个方法
 __unset(); 是直接unset删除对象中私有属性时,自动调用的方法

总的来说,虽然构建 OO 软件的习惯不止 7 个,但是遵循这里的 7 个习惯可以使代码符合基本 OO 设计标准.它们将为您提供更牢固的基础,在此基础之上建立更多 OO 习惯并构建可轻松维护与扩展的软件.这些习惯针对模块化的几个主要特性.有关独立于语言的 OO 设计优点的更多信息,请参阅 参考资料.

7 个优秀PHP OO 习惯包括:

◆保持谦虚.

◆做个好邻居.

◆避免看到美杜莎.

◆利用最弱的链接.

◆您是橡皮;我是胶水.

◆限制传播.

◆考虑使用模式.


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了程序员最美的情人节礼物,即使用JS渲染的3D玫瑰,通过在QQ空间和人人网上分享这个特殊的礼物,可以给情人带来惊喜和喜悦。 ... [详细]
author-avatar
横刀2502934567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有