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

Posted 函数

篇首语:挨金似金,挨玉似玉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PHP中实现面向对象编程的研究相关的知识,希望对你有一定的参考价值。

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

  面向对象编程的概念对每一个作者来说都有不同的看法 我提醒一下一个面向对象语言应有的东西      数据抽象和信息隐藏   继承   多态性    在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       ?>    在面向对象编程中一种好的机制是使用抽象类 抽象类是一种不能实例化而是用来给继承类定义界面的类 设计师经常使用抽象类来强制程序员只能从特定的基类来继承 所以就能确定新类有所需的功能 但在PHP中没有标准的办法做到这一点 不过     如果你在定义基类是需要这个特点 可以通过在构造函数中调用 die 这样你就可以确保它不能实例化 现在定义抽象类的函数并在每个函数中调用 die 如果在继承类中程序员不想重定义而直接调用基类的函数 将会产生一个错误     此外 你需要确信因为PHP没有类型 有些对象是从基类继承而来的继承类创建的 因此增加一个方法在基类来辨别类(返回 一些标识 )并验证这一点 当你收到一个对象作为参数派上用场 但对于一个恶棍程序没用办法 因为他可以在继承类中重定义此函数 通常这种办法只对懒惰的程序员奏效 当然 最好的办法是防止程序接触到基类的代码只提供界面     重载在PHP中不被支持 在面向对象编程中你可以通过定义不同参数种类和多少来重载一个同名成员函数 PHP是一种松散的类型语言 所以参数类型重载是没有用的 同样参数个数不同的办法重载也不能工作     有时候 在面向对象编程中重载构造函数很有用 所以你能以不同的方式创建不同的对象(通过传递不同的参数个数) 一个小巧门可以做到这一点     class Myclass   function Myclass()   $name= Myclass func_num_args();  $this >$name();  //Note that $this >$name() is usually wrong but here  //$name is a string with the name of the method to call       function Myclass ($x)   code;    function Myclass ($x $y)   code;        ?>    通过这种办法可以部分达到重载的目的     $obj =new Myclass( ); //Will call Myclass   $obj =new Myclass( ); //Will call Myclass      多态性  多态性被定义为当在运行时刻一个对象作为参数传递时 对象能决定调用那个方法的能力 例如 用一个类定义了方法 draw 继承类重定义 draw 的行为来画圆或正方形 这样你就有一个参数为 x 的函数 在函数里可以调用$x >draw() 如果支持多态性 那么 draw 方法的调用就取决于对象 x 的类型 多态性在PHP中很自然被支持(想一想这种情况在C++编译器中如果编译 那一个方法被调用?然而你不知道对象的类型是什么 当然现在不是这种情况)     幸好PHP支持多态性     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     ?>     PHP的面向对象编程  纯对象论者认为PHP不是真正的面向对象语言 这是对的 PHP是一种混合语言 你可以用面向对象或传统结构编程的方法来使用它 对于大型工程 然而你可能或需要使用纯面向对象方法来定义类 并在你的工程中只使用对象和类 越来越大的工程通过使用面向对象的方法会获得益处 面向对象工程非常容易维持 容易理解并且重用 这是软件工程的基本 使用这些概念在网站设计中是未来成功的关键      PHP中的高级面向对象技术  在回顾面向对象的基本概念之后 我将介绍一些更高级的技术      串行化  PHP并不支持持久性对象 在面向对象语言中持久性对象是一些经过应用程序多次调用仍然保持其状态和功能的对象 这意味着有一种能保存对象到文件或数据库中然后重新装载对象 这种机制称之为串行化 PHP 有一个串行化函数 可以在对象中调用 串行化函数返回一个字符串代表这个对象 然后串行化函数保存的是成员数据而不是成员函数     在PHP 中 如果你串行化一个对象到字符串 $s 然后删除此对象 再反串行化对象到 $obj 你仍然可以调用对象的方法函数 但我不推荐这种方法 这因为(a)这种功能在将来不一定支持(b)这导致一种幻象 如果你保存串行化对象到磁盘并退出程序 将来重新运行此脚本时你不能反串行化此对象并希望对象的方法函数仍有效 因为串行化出来的字符串并没有表示任何成员函数 最后 串行化保存对象的成员变量在PHP中非常有用 仅仅如此 (你可以串行化联合数组和数组到磁盘里)     例子:    $obj=new Classfoo();  $str=serialize($obj);  // Save $str to disk    // some months later    //Load str from disk  $obj =unserialize($str)    ?>    上例中 你可以恢复成员变量而没有成员函数(根据文档) 这导致 $obj >x 是 cha138/Article/program/PHP/201311/20815

相关参考

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

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

知识大全 PHP5学习笔记第一节面向对象编程

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

知识大全 关于什么叫面向接口编程

在一个面向对象的系统中系统的各种功能是由许许多多的不同对象协作完成的在这种情况下各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了而各个对象之间的协作关系则成为系统设计的关键小到不同类之间的

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

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

知识大全 Javascript面向对象编程

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

知识大全 面向Java开发人员的Scala指南: 面向对象的函数编程

面向Java开发人员的Scala指南:面向对象的函数编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

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

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

知识大全 Delphi面向对象的编程方法(二)

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

知识大全 Delphi面向对象的编程方法(一)

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

知识大全 如何快速掌握JavaScript面向对象编程

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