网站地图    收藏   

主页 > php专栏 > php面向对象 >

php面向对象,自动加载类,对象串行化,多态的应用

来源:未知    时间:2014-11-27 23:44 作者:xxadmin 阅读:

[导读] 自动加载类: 很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件,一个很大的烦恼是不得不在每个脚本,每个类一个文件,开头写一个长长的包含文件的列表. 在软件开...

自动加载类:很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件,一个很大的烦恼是不得不在每个脚本,每个类一个文件,开头写一个长长的包含文件的列表.

在软件开发的系统中,不可能把所有的类都写在一个PHP文件中,当在一个PHP文件中需要调用另一个文件中声明的类时,就需要通过include把这个文件引入,不过有的时候,在文件众多的项目中,要一一将所需类的文件都include进来,是一个很让人头疼的事,所以我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?这就是我们这里我们要讲的自动加载类.

在 PHP 5 中,可以定义一个 __autoload()函数,它会在试图使用尚未被定义的类时自动调用,通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类,__autoload()函数接收的一个参数,就是你想加载的类的类名,所以你做项目时,在组织定义类的文件名时,需要按照一定的规则,最好以类名为中心,也可以加上统一的前缀或后缀形成文件名,比如xxx_classname.php、classname_xxx.php以及就是classname.php等等.

本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClass2 类,代码如下:

  1. function __autoload($classname
  2.     require_once $classname . '.php'
  3.  
  4. //MyClass1类不存在自动调用__autoload()函数,传入参数”MyClass1” 
  5. $obj  = new MyClass1(); 
  6.  
  7. //MyClass2类不存在自动调用__autoload()函数,传入参数”MyClass2” 
  8. $obj2 = new MyClass2(); 

对象串行化

有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化, 就像我们现在想把一辆汽车通过轮船运到美国去,因为汽车的体积比较大,我们可以把汽车拆开成小的部件,然后我们把这些部件通过轮般运到美国去,到了美国再把这些部件组装回汽车。

有两种情况我们必须把对象串行化,第一种情况就是把一个对象在网络中传输的时候要将对象串行化,第二种情况就是把对象写入文件或是数据库的时候用到串行化。

串行化有两个过程,一个是串行化,就是把对象转化为二进制的字符串,我们使用serialize()函数来串行化一个对象,另一个是反串行化,就是把对象转化的二进制字符串再转化为对象, 我们使用unserialize()函数来反串行化一个对象.

PHP中serialize()函数的参数为对象名,返回值为一个字符串,Serialize()返回的字符串含义模糊,一般我们不会解析这个串来得到对象的信息,我们只要把返回来的这个字符串传到网络另一端或是保存到方件中即可.

PHP中unserialize()函数来反串行化对象,这个函数的参数即为serialize()函数的返回值,输出当然是重新组织好的对象,代码如下:

  1. class Person 
  2.     //下面是人的成员属性 
  3.     var $name;  //人的名子 
  4.     var $sex;    //人的性别 
  5.     var $age;    //人的年龄 
  6.  
  7.     //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值 
  8.     function __construct($name=""$sex=

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论