PHP5探索专题
文章平均质量分 54
Haohappy2004
多年互联网研发、团队管理经验。欢迎交流。
MSN: haohappy@php.net
展开
-
PHP5的对象模型[5]--对象复制
第五节--克隆PHP5中的对象模型通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个特殊的方法,称为__clone. 像__construct和__destruct一样,前面有两个下划线.默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(原创 2004-08-08 00:02:00 · 1576 阅读 · 0 评论 -
PHP5的异常处理机制[9]--Try-catch 语句
Try-catch 语句为了进一步处理异常,我们需要使用try-catch语句—包括Try语句和至少一个的catch语句。任何调用 可能抛出异常的方法的代码都应该使用try语句。Catch语句用来处理可能抛出的异常。以下显示了我们处理getCommandObject()抛出的异常的方法:index_php5.php 后半段// PHP 5 try { $mgr = new Co原创 2004-08-30 21:34:00 · 3478 阅读 · 0 评论 -
PHP5的异常处理机制[12]--异常的传递、重掷异常
如果我们已经触发了一些在发生时无法马上处理的异常,有一个很好的解决方案—将处理异常的责任交回给调用当前方法的代码,也就是在catch语句中再次抛出异常(重掷异常)。这将使异常沿着方法的调用链向上传递。index_php5_5.php// PHP 5 class RequestHelper { private $request = array(); private $defa原创 2004-08-30 22:01:00 · 2531 阅读 · 0 评论 -
PHP5的异常处理机制[5]--PHP5之前的错误处理--使用PEAR处理错误
(三)使用PEAR处理错误你也可以使用PEAR来处理错误。当发生错误,将返回一个 Pear_Error对象。后面的代码通过一个静态方法PEAR::isError()来检验这个对象。如果错误确实发生了,那么返回的Pear_Error对象将提供你需要的所有相关信息:PEAR::getMessage()- the error message 出错信息PEAR:原创 2004-08-30 20:50:00 · 2096 阅读 · 0 评论 -
PHP5的异常处理机制[6]--PHP5之前的错误处理--小结
综合以上的讨论,我们需要一个这样的错误处理机制:1.允许一个方法给出一个出错标记给客户代码 2.提供程序错误的详细信息 3.让你同时判断多个出错条件,将你的错误报告和程序处理流程分开。4.返回值必须是独立的类型,不会与正常返回的类型相混淆 PHP的异常机制恰好完全满足以上要求。原创 2004-08-30 21:04:00 · 2189 阅读 · 0 评论 -
PHP5的异常处理机制[2]--PHP5之前的错误处理之die()
PHP5之前的错误处理在PHP5之前的程序错误处理多使用以下三种办法:1. 使用trigger_error()或die()函数来生成一个脚本层次的警告(warning)或致命错误(fatal error);2. 在类方法或函数中返回一个错误标记(如false),也可能设置一个之后可以检查的属性或全局变量(如$error),然后在适合的地方检验其值再决定是否继续执行程序(如if($error==1)原创 2004-08-27 22:07:00 · 2472 阅读 · 0 评论 -
PHP5的异常处理机制[3]--PHP5之前的错误处理之trigger_error()
我们或许可以通过trigger_error()生成一个用户警告来代替,使程序更具有灵活性。Index2.php// PHP 4 require_once(cmd_php4/Command.php); class CommandManager { var $cmdDir = "cmd_php4"; function getCommandObject($cmd) {原创 2004-08-28 12:45:00 · 3217 阅读 · 0 评论 -
PHP5的异常处理机制[7]--PHP5内建的Exception类
PHP5的异常机制根据我们以上讨论的,PHP内建的异常类需要有以下成员方法:__construct()构造函数,需要一个出错信息和一个可选的整型错误标记作参数getMessage()取得出错信息getCode()出错的代码getFile()异常发生的文件getLine()异常发生的行原创 2004-08-30 21:19:00 · 2655 阅读 · 0 评论 -
PHP5的异常处理机制[13]--获得异常相关的更多信息
获得异常相关的更多信息以下是用来格式化输出异常信息的代码:index_php5_6.php// PHP 5 class Front { static function main() { try { $helper = new RequestHelper(array(cmd=>realcommand)); $he原创 2004-08-30 22:08:00 · 2452 阅读 · 0 评论 -
PHP5的异常处理机制[4]--PHP5之前的错误处理--返回Error flag(错误标记)
(二)返回错误标记 脚本层次的错误处理比较粗糙但很有用。尽管如此,我们有时需要更大的灵活性。我们可以使用返回错误标识的办法来告诉客户代码“错误发生了!”。这将程序是否继续,如何继续的责任交给客户代码来决定。这里我们改进了前面的例子来返回一个脚本执行出错的标志(false是一个常用的不错的选择)。index3.php// PHP 4 require_once(cmd_php4/Co原创 2004-08-30 17:42:00 · 2271 阅读 · 0 评论 -
PHP5的异常处理机制[8]--使用throw关键字
使用 throw关键字建立一个Exception对象后你可以将对象返回,但不应该这样使用,更好的方法是用throw关键字来代替。throw用来抛出异常:throw new Exception( "my message", 44 ); throw 将脚本的执行中止,并使相关的Exception对象对客户代码可用。以下是改进过的getCommandObject() 方法:index原创 2004-08-30 21:29:00 · 2614 阅读 · 0 评论 -
PHP5的异常处理机制[10]--同时处理多个错误
处理多个错误在目前为止异常处理看起来和我们传统的作法—检验返回的错误标识或对象的值没有什么太大区别。让我们将CommandManager处理地更谨慎,并在构造函数中检查command目录是否存在。index_php5_2.php// PHP 5 require_once(cmd_php5/Command.php); class CommandManager { privat原创 2004-08-30 21:47:00 · 2954 阅读 · 0 评论 -
PHP5的异常处理机制[11]--Exception类的子类
Exception类的子类有两个理由让我们想要从Exception类中派生中子类:1. 让子类提供自定义的功能;2. 区分不同类型的异常;看第二个例子。使用CommandManager类时我们可能会产生两个错误:一个是一般性的错误如找不到目录,另一个是找不到或无法生成Command对象。这样我们需要针对这两个错误来定义两种异常子类型。index_php5_4.php//原创 2004-08-30 21:56:00 · 3727 阅读 · 3 评论 -
PHP5的异常处理机制[14]--总结 [END]
总结异常机制提供了几个非常关键的好处:(1) 通过将错误处理集中于catch语句中,你可以将错误处理从应用流程中独立出来。这也使代码的可读性提高,看起来令人愉快。我通常采取非常严格的策略来捕捉所有异常并中止脚本执行。这样可以获得所需的附加的弹性,同时实现安全易用的异常管理。?(2) 重掷异常,将异常数据流从低层传递至高层,就是说异常被传回最适合决定如何处理异常的地方。这看起来会显得原创 2004-08-30 22:11:00 · 2726 阅读 · 2 评论 -
推荐《Upgrading to PHP 5》
PHP5的问世,带来了新的一轮学习和将原有程序升级的热潮。那么,到底我们要怎么掌握PHP5,需要学习什么呢?在此向大家推荐《Upgrading to PHP 5》 (Adam Trachtenberg著) ,它是我前些天读完的一本书(恰好今天在PHP EveryWhere上也看到一篇书评),相信对你有所帮助。作者显然考虑到传统的PHPer对于PHP4的面向过程的开发方式比较熟悉,而对于面向原创 2004-09-14 10:25:00 · 4972 阅读 · 2 评论 -
Zend Framework 手册中文版 最近更新:2006-3-17
内容过多,不便贴在Blog上,更新会放在phpe论坛,有兴趣的朋友可以不时关注一下。http://club.phpe.net/index.php?s=&act=ST&f=16&t=12543相信Zend Framework对于很多人都有借鉴意义(即使你不支持MVC),我打算花点业余时间把Zend Framework的手册翻译过来。应该对新手,老手都有点用 :) 翻译的路线是按我自己的的兴趣来安排的原创 2006-03-17 23:41:00 · 3137 阅读 · 5 评论 -
PHP5的异常处理机制[1]--本文索引
作者: Matt Zandstra 翻译: Haohappy 04-8-20Haohappy@msn.com本文面向的读者简介在PHP5之前的错误处理-使用die()或trigger_error()-返回错误标记-使用PEAR处理错误PHP5的异常机制-使用throw关键字-try-catch语句-处理多个错误-自定义异常类型-异常的传递-原创 2004-08-27 21:16:00 · 3083 阅读 · 0 评论 -
[分享]EditPlus PHP5语法文件
今天将PHP5新增的语法加入EditPlus的语法文件,使之可以支持PHP5的语法加亮,发在这里希望对使用EditPlus的朋友们有点帮助。将附件里的php.stx文件覆盖掉C:/Program Files/EditPlus 2/php.stx即可。主要是新增了关键字,函数部份工作量太大(要查手册对照,特别是DOM,XML等部份改动大),暂时不想改动,我想最常用的还是关键字呵呵。同样的原因,不能提原创 2004-08-16 14:47:00 · 3025 阅读 · 2 评论 -
PHP5的对象模型[9]--绑定
第九节--绑定除了限制访问,访问方式也决定哪个方法将被子类调用或哪个属性将被子类访问. 函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定. 在计算机语言中有两种主要的绑定方式—静态绑定和动态绑定. 静态绑定发生于数据结构和数据结构间,程序执行之前. 静态绑定发生于编译期, 因此不能利用任何运行期的信息. 它针对函数调用与函数的主体,或变量与内存中的区块. 因为PHP是一种动态原创 2004-08-08 00:11:00 · 1636 阅读 · 0 评论 -
PHP5的对象模型[12]--类的自动加载
第十二节--类的自动加载当你尝试使用一个未定义的类时,PHP会报告一个致命错误. 解决方法就是添加一个类,可以用include包含一个文件. 毕竟你知道要用到哪个类. 但是,PHP提供了类的自动加载功能, 这可以节省编程的时间. 当你尝试使用一个PHP没有组织到的类, 它会寻找一个__autoload的全局函数. 如果存在这个函数,PHP会用一个参数来调用它,参数即类的名称. 例子6.15说明了_原创 2004-08-08 00:17:00 · 1931 阅读 · 0 评论 -
PHP5的对象模型[3]--定义一个类
当你声明一个类,你需要列出对象应有的所有变量和所有函数—被称为属性和方法. 3.1.1中显示了一个类的构成. 注意在大括号({})内你只能声明变量或者函数. 3.1.2中显示了如何在一个类中定义三个属性和两个方法.3.1.1class Name extends Another Class { Access Variable Declaration Access Function Declara原创 2004-08-07 23:54:00 · 2025 阅读 · 0 评论 -
PHP5的对象模型[8]--访问限制
第八节--访问方式PHP5的访问方式允许限制对类成员的访问. 这是在PHP5中新增的功能,但在许多面向对象语言中都早已存在. 有了访问方式,才能开发一个可靠的面向对象应用程序,并且构建可重用的面向对象类库.像C++和Java一样,PHP有三种访问方式:public,private和protected. 对于一个类成员的访问方式,可以是其中之一. 如果你没有指明访问方式,默认地访问方式为public原创 2004-08-08 00:08:00 · 1600 阅读 · 0 评论 -
PHP5的对象模型[10]--抽象方法和抽象类
第十节--抽象方法和抽象类面向对象程序通过类的分层结构构建起来. 在单重继承语言如PHP中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 如果我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继承出来的子类合作原创 2004-08-08 00:13:00 · 1579 阅读 · 0 评论 -
PHP5的对象模型[15]--其它特性(最新)
4) ★ Class Type Hints 类型指示 大家都知道,PHP是一种弱类型的语言。在使用变量前不需要定义,不需要声明变量的数据类型。这在编程中带来很多便利,但也带了一些隐患,特别当变量的类型变化时。在PHP5增加了类型指示,可以在执行过程中自动对类方法的参数类型进行判断。这类似于Java2中的RTTI,配合reflection可以让我们很好地控制对原创 2004-08-08 00:35:00 · 1796 阅读 · 0 评论 -
PHP5的对象模型[1]--面向对象编程
第一节--面向对象编程面向对象编程被设计来为大型软件项目提供解决方案,尤其是多人合作的项目. 当源代码增长到一万行甚至更多的时候,每一个更动都可能导致不希望的副作用. 这种情况发生于模块间结成秘密联盟的时候,就像第一次世界大战前的欧洲.//haohappy注:喻指模块间的关联度过高,相互依赖性太强.更动一个模块导致其它模块也必须跟着更动.想像一下,如果有一个用来处理登录的模块允许一个信用卡处理模块原创 2004-08-07 23:35:00 · 2038 阅读 · 0 评论 -
PHP5的对象模型[11]--重载
第十一节--重载PHP4中已经有了重载的语法来建立对于外部对象模型的映射,就像Java和COM那样. PHP5带来了强大的面向对象重载,允许程序员建立自定义的行为来访问属性和调用方法.重载可以通过__get, __set, and __call几个特殊方法来进行. 当Zend引擎试图访问一个成员并没有找到时,PHP将会调用这些方法.在例6.14中,__get和__set代替所有对属性变量数组的访问原创 2004-08-08 00:15:00 · 1605 阅读 · 0 评论 -
为Zend Studio3.5添加PHP5 DOM代码的自动完成功能
"If you are serious about programming PHP, you need the right tools for the job. Zend Studio is the Swiss army knife of the PHP IDE world."Zend Studio 3.5是目前最好用的PHP5开发工具,因为它提供PHP5代码的语法加亮和自动完成功能。但它原创 2004-08-14 16:36:00 · 2046 阅读 · 0 评论 -
PHP5的对象模型[2]--对象模型
PHP5 的对象模型PHP5有一个单重继承的,限制访问的,可以重载的对象模型. 本章稍后会详细讨论的”继承”,包含类间的父-子关系. 另外,PHP支持对属性和方法的限制性访问. 你可以声明成员为private,不允许外部类访问. 最后,PHP允许一个子类从它的父类中重载成员.PHP5的对象模型把对象看成与任何其它数据类型不同,通过引用来传递. PHP不要求你通过引用(reference)显性传原创 2004-08-07 23:48:00 · 2140 阅读 · 3 评论 -
PHP5的对象模型[4]--构造函数和析构函数
第四节--构造函数和析构函数如果你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行. 清楚地说,__是两个下划线. 就像其它任何函数一样,构造函数可能有参数或者默认值. 你可以定义一个类来建立一个对象并将其属性全放在一个语句(statement)中. 你也可以定义一个名为__destruct的函数,PHP将在对象被销毁前调用这个函数.原创 2004-08-07 23:57:00 · 1831 阅读 · 0 评论 -
PHP5的对象模型[6]--访问属性和方法
第六节--访问属性和方法一个对象实例的属性是变量,就像PHP的其他变量一样. 但是你必须使用->运算符来引用它们. 不需要在属性前使用美元符$. 例如, 6.1中打印User对象的name属性那一行. 可以联用->,如果一个对象的属性包含了一个对象,你可以使用两个->运算符来得到内部对象的属性. 你甚至可以用双重引用的字符串来放置这些表达式. 看6.5中的例子,对象House中的属性room包含了原创 2004-08-08 00:04:00 · 1788 阅读 · 0 评论 -
PHP5的对象模型[7]--类的静态成员
第七节--类的静态成员类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关. 他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据. 静态成员包括静态方法和静态属性.静态属性包含在类中要封装的数据,可以由所有类的实例共享. 实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量我们在下例中使用了一个静态属性Counter::$count.原创 2004-08-08 00:06:00 · 1628 阅读 · 0 评论 -
PHP5的对象模型[13]--对象串行化
第十三节--对象串行化串行化可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法.当一个对象被串行化,PHP会调用__slee原创 2004-08-08 00:22:00 · 1553 阅读 · 0 评论 -
PHP5的对象模型[14]--Zend引擎的发展
第十四节--Zend引擎的发展本章的最后一节,Zeev讨论了Zend引擎带来的对象模型,特别提到它与PHP的前几个版本中的模型有什么不同.当1997年夏天,我们开发出PHP3, 我们没有计划要使PHP具备面向对象的能力. 当时没有任何与类和对象有关的想法. PHP3是一个纯粹面向过程的语言. 但是,在1997.8.27的晚上PHP3 alpha版中增加了对类的支持. 增加一个新特性给PHP,当时仅原创 2004-08-08 00:25:00 · 1555 阅读 · 0 评论 -
PHP5.3中新增的魔术常量__DIR__
来源:PHP5.3中新增的魔术常量__DIR__我们知道PHP中提供了一个魔术常量(magic constant)__FILE__,用来指向当前执行的PHP脚本。但PHP没有直接提供该脚本所在目录的常量。也就是说如果我们要得到当前PHP脚本所在的目录,需要使用dirname()这个函数:$dir = dirname(__FILE__);?>在PHP5.3中,增加了一个新的常量_原创 2008-02-23 11:52:00 · 19700 阅读 · 5 评论