用 PHP 走向动态

嘎活

嘎活

2016-01-29 14:15

用 PHP 走向动态,用 PHP 走向动态

用动态对象为应用程序增加灵活性

可以参考英文原文 http://www.ibm.com/developerworks/library/os-php-flexobj/index.html?S_TACT=105AGX52&S_CMP=cn-a-os
               PHP V5 新的面向对象编程特性显著提升了这个流行语言中的功能层次。
              学习如何用 PHP V5 动态特性创建可以满足需求的对象。


      PHP V5 中新的面向对象编程(OOP)特性的引入显著提升了这个编程语言的功能层次。现在不仅有了私有的、受保护的和公共的成员变量和函数 —— 就像在 Java™、 C++ 或 C# 编程语言中一样 —— 但是还可以创建在运行时变化的对象,即动态地创建新方法和成员变量。而使用 Java、C++ 或 C# 语言是做不到这件事的。这种功能使得超级快速的应用程序开发系统(例如 Ruby on Rails)成为可能。
但是,在进入这些之前,有一点要注意:本文介绍 PHP V5 中非常高级的 OOP 特性的使用,但是这类特性不是在每个应用程序中都需要的。而且,如果不具备 OOP 的坚实基础以及 PHP 对象语法的初步知识,这类特性将会很难理解。



动态的重要性
对象是把双刃剑。一方面,对象是封装数据和逻辑并创建更容易维护的系统的重大方式。但另一方面,它们会变得很繁琐,需要许多冗余的代码,这时可能最希望做到的就是不要犯错。这类问题的一个示例来自数据库访问对象。一般来说,想用一个类代表每个数据库表,并执行以下功能:对象从数据库读出数据行;允许更新字段,然后用新数据更新数据库或删除行。还有一种方法可以创建新的空对象,设置对象的字段,并把数据插入数据库。
如果在数据库中有一个表,名为 Customers,那么就应当有一个对象,名为 Customer,它应当拥有来自表的字段,并代表一个客户。而且 Customer 对象应当允许插入、更新或删除数据库中对应的记录。现在,一切都很好,而且有也很多意义。但是,有许多代码要编写。如果在数据库中有 20 个表,就需要 20 个类。
有三个解决方案可以采用。第一个解决方案就是,坐在键盘前,老老实实地录入一段时间。对于小项目来说,这还可以,但是我很懒。第二个解决方案是用代码生成器,读取数据库模式,并自动编写代码。这是个好主意,而且是另一篇文章的主题。第三个解决方案,也是我在本文中介绍的,是编写一个类,在运行时动态地把自己塑造成指定表的字段。这个类执行起来比起特定于表的类可能有点慢 —— 但是把我从编写大量代码中解脱出来。这个解决方案在项目开始的时候特别有用,因为这时表和字段不断地变化,所以跟上迅速的变化是至关重要的。
所以,如何才能编写一个能够弯曲 的类呢?

写一个柔性的类
对象有两个方面:成员变量方法。在编译语言(例如 Java)中,如果想调用不存在的方法或引用不存在的成员变量,会得到编译时错误。但是,在非编译语言,例如 PHP 中,会发生什么?
在 PHP 中的方法调用是这样工作的。首先,PHP 解释器在类上查找方法。如果方法存在,PHP 就调用它。如果没有,那么就调用类上的魔法方法 __call(如果这个方法存在的话)。如果 __call 失败,就调用父类方法,依此类推。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)魔法方法
魔法方法是有特定名称的方法,PHP 解释器在脚本执行的特定点上会查找魔法方法。最常见的魔法方法就是对象创始时调用的构造函数。 __call 方法有两个参数:被请求的方法的名称和方法参数。如果创建的 __call 方法接受这两个参数,执行某项功能,然后返回 TRUE,那么调用这个对象的代码就永远不会知道在有代码的方法和 __call 机制处理的方法之间的区别。通过这种方式,可以创建这样的对象,即动态地模拟拥有无数方法的情况。
除了 __call 方法,其他魔法方法 —— 包括 __get
展开更多 50%)
分享

猜你喜欢

用 PHP 走向动态

PHP
用 PHP 走向动态

用PHP制作动态计数器

PHP
用PHP制作动态计数器

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用PHP实现WEB动态网页静态

PHP
用PHP实现WEB动态网页静态

用PHP产生动态的影像图

PHP
用PHP产生动态的影像图

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用PHP动态生成虚拟现实VRML网页

PHP
用PHP动态生成虚拟现实VRML网页

用PHP编程语言开发动态WAP页面

PHP
用PHP编程语言开发动态WAP页面

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用Delphi实现远程屏幕抓取

用Delphi实现远程屏幕抓取

Delphi5实现多层Client/Server应用程序(1)

Delphi5实现多层Client/Server应用程序(1)
下拉加载更多内容 ↓