知识大全 PHP学习笔记之面向对象设计

Posted 函数

篇首语:我走在逃离命运的路上,却与命运不期而遇。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PHP学习笔记之面向对象设计相关的知识,希望对你有一定的参考价值。

PHP学习笔记之面向对象设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

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

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

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

  它比较适合多人合作来开发项目 所以现在很多大中型网站都选择了用OOP来开发

  本文主要讲解了用php做面向对象编程的最基本的方法和代码实例 如何创建一个class和如何生成一个class的实例等等 只是一个入门 非常的简单 要想深学这点是远远不够的 只适合php的初学者

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

代码如下 复制代码 <?php class Test public $name= Janking $sex= male $age= ; function __construct() echo $this >age <br /> $this >name <br /> $this >sex <br /> ; function func() echo $this >age <br /> $this >name <br /> $this >sex <br /> ; $P=new Test(); echo <br /><br /> ; $P >age= ; $P >name="Rainy"; $P >sex="female"; $P >func(); ?>

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

代码如下 复制代码

   <?php class Test private $name= Janking $sex= male $age= ; function __construct() $this >funcOne(); function func() echo $this >age <br /> $this >name <br /> $this >sex <br /> ; private function funcOne() echo $this >age <br /> $this >name <br /> $this >sex <br /> ; $P=new Test(); echo <br /><br /> ; $P >func(); $P >age= ; // Cannot access private property Test::$age $P >name="Rainy"; // Cannot access private property Test::$name $P >sex="female"; // Cannot access private property Test::$female $P >funcOne(); // Call to private method Test::funcOne() from context ?>

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

   数据抽象和信息隐藏

   继承

   多态性

  在PHP中使用类进行封装的办法

代码如下 复制代码

  class Something // In OOP classes are usually named starting with a cap letter var $x;

  function setX($v) // Methods start in lowercase then use lowercase to seprate // words in the method name example getValueOfArea() $this >x=$v;

  function getX() return $this >x;

  ?>

  

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

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

  使用 new 来创建一个对象

代码如下 复制代码

  $obj = new Something;

  然后使用成员函数

代码如下 复制代码

  $obj >setX( ); $see = $obj >getX();

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

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

  在 PHP 中继承使用 extend 来声明

代码如下 复制代码

  class Another extends Something var $y; function setY($v) // Methods start in lowercase then use lowercase to seperate // words in the method name example getValueOfArea() $this >y=$v;

  function getY() return $this >y;

  ?>

  

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

代码如下 复制代码

  $obj =new Another; $obj >setX( ); $obj >setY( );

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

  在继承类中你可以重新定义来重定义方法 如果我们在 "Another" 重新定义 getX 那么我们不再能存取 "Something" 中的成员函数 getX 同样 如果我们在继承类中声明一个和父类同名的成员变量 那么继承类的变量将隐藏父类的同名变量

  你可以定义一个类的构造函数 构造函数是和类同名的成员函数 在你创建类的对象时被调用

代码如下 复制代码

  class Something var $x;

  function Something($y) $this >x=$y;

  function setX($v) $this >x=$v;

  function getX() return $this >x;

  ?>

  

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

代码如下 复制代码

  $obj=new Something( );

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

代码如下 复制代码

  function Something($x=" " $y=" ")

  然后:

代码如下 复制代码

  $obj=new Something(); // x= and y= $obj=new Something( ); // x= and y= $obj=new Something( ); // x= and y=

  缺省参数的定义方法和 C++ 一样 因此你不能传一个值给 Y 但让 X 取缺省值 实参的传递是从左到右 当没有更多的实参时函数将使用缺省参数

  只有当继承类的构造函数被调用后 继承类的对象才被创建 父类的构造函数没有被调用 这是PHP不同其他面向对象语言的特点 因为构造函数调用链是面向对象编程的特点 如果你想调用基类的构造函数 你不得不在继承类的构造函数中显式调用它 这样它能工作是因为在继承类中父类的方法全部可用

代码如下 复制代码

  function Another() $this >y= ; $this >Something(); //explicit call to base class constructor

  ?>

  多态性

代码如下 复制代码

  function niceDrawing($x) //Supose this is a method of the class Board $x >draw();

  $obj=new Circle( ); $obj =new Rectangle( );

  $board >niceDrawing($obj); //will call the draw method of Circle $board >niceDrawing($obj ); //will call the draw method of Rectangle

  ?>

  和封装有关的魔术方法

  __set() 是直接设置私有成员属性值时 自动调用的方法

  __get() 是直接获取私有成员属性值时 自动调用的方法

  __isset(); 是直接isset查看对象中私有属性是否存时自动调用这个方法

cha138/Article/program/PHP/201311/21100

相关参考

知识大全 php设计模式介绍之迭代器模式

  《PHP设计模式介绍》第八章迭代器模式  类中的面向对象编程封装应用逻辑类就是实例化的对象每个单独的对象都有一个特定的身份和状态单独的对象是一种组织代码的有用方法但通常你会处理一组对象或者集合  

知识大全 PHP程序61条面向对象分析设计的经验原则[1]

PHP程序61条面向对象分析设计的经验原则[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 PHP程序61条面向对象分析设计的经验原则[2]

PHP程序61条面向对象分析设计的经验原则[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 面向对象思想之 -- 理解类和对象

  上一次在使用Java开始面向对象的编程这篇文章中我们学习了一个编程语言要真正成为面向对象的它应该支持信息隐藏/封装多态继承和动态绑定另外我们知道了Java完全支持这些功能而且知道了因为Java是一

知识大全 PHP面向对象编程快速入门

PHP面向对象编程快速入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  面向对象编程(OOP)

知识大全 面向对象三大特性之封装

  java学习已经到了最核心的章节面向对象的三大特性封装继承和多态接下来会写多篇博文(数目不定请关注近期博客吧!午饭们!)来总结这里面的每一个细节小可很希望每一篇文章的阐述会给你带来一点启发小可也是

知识大全 PHP中实现面向对象编程

PHP中实现面向对象编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这篇文章介绍在PHP的面

知识大全 PHP中实现面向对象编程的研究

PHP中实现面向对象编程的研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  面向对象编程的概念

知识大全 面向对象思想之 -- 继承以及多态

  在OOP简介:理解类和对象这篇文章中我们讨论了继承和多态性的好处我们还粗略的学习了如何扩展基类定义子类继承基类中合适的行为和属性而重载那些并不适合的行为和属性这种方式能够削减代码宏余以及错误的堆积

知识大全 php面向对象public private protected 访问修饰符

本篇文章是对php面向对象publicprivateprotected访问修饰符进行了详细的分析介绍需要的朋友参考下   PHP中有三种访问修饰符分别是public(公共的默认)protec