PHPER的九阴真经
时间:2009-08-07
来源:互联网
书中的有些章节,是原本就掌握的,还有一些则是我之前一无所知的,看完之后发现,在那些原本我自以为已经掌握的知识中,原来还有这么多经验可以汲取。很多之前写程序时一知半解,知其然而不知其所以然的问题,在这本书中,仅用一句话两句话就解释得清清楚楚,以前看很多老外的程序,总不明白为什么要那么写,看了这本书,就很些恍然大悟的感觉。要说“朝闻道,夕死可矣”,那是夸张了,但是看到精彩处,喜得抓耳挠腮,坐立不安,那是时时都会有的。
对于那些我原本一无所知的内容,我反而一无所获了,不排除是公车上看不进的关系,但我觉得更大的可能性是这本书太过精深,就如黄药师和梅超风得了九阴真经,却终究不得其门而入,一定要郭靖和老顽童那样,有全真教的底子才能学会得会吧。好在有了书中说到的要点在,网上搜也好,另买一些书也罢,总能把这些知识点学全的。
所以,我觉得这本书可以算得上是天下PHP总纲,可以视为我们PHPER的九阴真经。
作者: slime 发布时间: 2009-08-07
作者: cnkiller 发布时间: 2009-08-10
《PHP高级程序设计--模式、框架与测试》
第一章、抽象类、接口和契约式编程
1.1 抽象类: 书中用一个实例来演示抽象类的作用(3-4页)
1-1定义一个抽象基类,提供一个抽象方法获取车的最高时速
1-2继承抽象类,直接定义该车的最高时速
1-3使用抽象类提供的公共功能,该类的三个函数作用分别是:初始化变量、判断车速是否超过街道限速,把符合限速的车加入数组
个人观点:例子不是很好,继承抽象类怎么都觉得有点象是类的实例化,但要点描述得很清楚:抽象类的作用是限制扩展类的写法,要求必须包含某函数,但并不限制该函数如何具体实行。抽象类保证了实例化层次的兼容性,如果扩展的函数忘了写方法,会直接生成语法错误,减少了我们寻找和判断错误花费的时间
1.2 接口:如果一个类的所有方法都是抽象的,那么它就是一个接口。要实现一个接口,必须实现接口中的所有方法
1.3 instanceof 操作符 判断一个类是否从某个类型继承,或是否实现某个接口
1.4 契约式编程 指编写类之前先申明接口的一种编程实践
作者: slime 发布时间: 2009-08-14
第二章、静态变量、成员和方法
一、可以用static声明一个静态变量,静态变量仅在函数体内有效,用来代替类的全局变量
二、静态成员:对类变量用static进行声明,该变量将对类的所有实例都有效
三、双冒号:作用域限定符,左边表示的是作用域,右边表示的是访问的成员。作用域有self和parent,PHP6还提供了static作用域
四、直接用类名::成员方式,如MyClass::$myValue,可以直接访问类的静态成员,从而减少系统开销
五、无需实例化类就可以访问类的静态方法,如MyClass::$myFunction();
六、“静态”的缺点:静态类定义了两个类的绑定关系,提高了系统的相互依赖性
作者: slime 发布时间: 2009-08-14
第三章、单例模式和工厂模式
一、实现单例模式的方法:
把__construct()方法标记为private,使类无法在外部实例化;
把__clone()方法标记为private,使类的实例无法在外部复制;
增加一个静态方法getInstance(),在该方法中用self::$_instance=new self()实例化类本身并返回该句柄。
程序第一次用$new=$newClass->getInstance()方法时实例化类,以后重复使用该方法时,直接返回之前实例的引用,从而保证该类只有一个实例。
二、使用不能被实例化的纯静态类
把__construct()方法标记为private,使类无法在外部实例化;
除了__construct()外所有方法设置为静态(static),使之可以直接从外部调用。
三、工厂模式
工厂模式实际上就是用一个类包装多个类,比如,我们常用的数据库系统有很多,包括mysql、mssql等等,用一个类进行封装,根据实例化时输入的参数不同,用mysql的就实例化mysql类,用mssql的就实例化mssql类。书中的另一个例子是获取不同格式图像的参数,如图像高度、宽度等,由于图像也有多种不同格式,如jpg、gif、png等等,所以也适合采用工厂模式
作者: slime 发布时间: 2009-08-21
《PHP高级程序设计--模式、框架与测试》
第四章、异常
一、异常用来处理不应该在正常的代码执行情况中发生的任何类型的错误。也就是说,如果有可能因为外部原因导致错误时,应该使用异常进行判断,比如数据库连接失败。
二、异常由try、catch、throw以及Exception基类来实现。
三、Exception
Exception的构造函数可以接受一条错误信息和一个错误代码作为参数,通过检查返回的代码,可以以数字的方式映射异常的类型
四、扩展异常
可以对异常的基类进行扩展以自定义异常的处理方式,比如记录自定义异常的日志。
五、异常产生的的开销极大,不应该使用异常处理程序的正常流程
六、错误代码
利用返回的错误代码来回显错误信息,这样可以把所有错误代码集中到一个程序,甚至可以使用各国语言显示错误
七、可以使用多个catch语句块捕捉特定类型的异常
八、可以在捕捉异常并进行一些特殊处理后重新用throw抛出异常
作者: slime 发布时间: 2009-08-21
第五章、PHP6的新特性
一、在linux系统中安装php6;
二、内核支持Unincode,PHP中的大多数字符串方法都会被更新,以直接处理Unincode字符,如strlen()等,fopen()函数也可能被更新,以读取Unincode文档;
三、支持多层次的命名空间,以便在同一个程序中使用两个同名但不同功能的类;
?四、延迟静态绑定
?五、具有动态特性的静态方法
六、三目运算符可以省略中间的值
七、XMLWrite类
四五两个没有完全理解,反正PHP6还远,再议。
作者: slime 发布时间: 2009-08-21
《PHP高级程序设计--模式、框架与测试》
第六章、文档编写和编码规范
一、编码规范
Zend Framework和PEAR的标准都要求类和方法的大括号另起一行,但在if/else语句中则会放在同一行上;
Zend Framework规范要求else if之间加一个空格
二、PHP注释和文法解析[code]
//1.单行注释
/*
2.多行注释
*/
/**
3.文档注释
*/
[/code]三、文法解析
一般注释在编译和解析时会被废弃掉,文档注释则会被保留并与代码原素相关联。
四、元数据是用来描述其它数据的数据,例如类中的所有方法;解析程序可以将注释自动转换为有意义的文档;可以通过文档注释来添加附加元数据比如对程序执行不重要但对创建代码的手册却很重要的元数据
五、phpdoc,一直在用的常用文档解决方案
六、DOCBOOK,作用是用XML来编写文档,可以由程序转换为HTML、WORD、PDF、CHM等常见格式 ,非常便利。更详细的用法手册:http://www.worldhello.net/doc/docbook_howto/index.html
作者: slime 发布时间: 2009-08-21
第七章、反射API
这章的内容是以前完全没有接触到的,一时间觉得难以理解。
反射是由一系列类、异常和接口构成的,使用它们可以用来分析其它的类、接口、方法、属性、函数和扩展。反射可以访问程序元数据并与相关联的注释打交道。
利用反射技术的插件架构,可以使程序只在需要时创建可选接口,比如书中的第一个例子,一个页面中有可能有菜单项、文章和侧边栏,实例演示了如何根据需要加载以上三者中的一项或多项。
书中的第二个例子用到了PECL中的DocBlock,但书上只介绍了linux下的安装方法,在windows下用pecl install的方法安装总是报错,网友IMKOW邑牧客猜测可能是PHP5.3在WINDOWS下不够稳定的关系,不想换PHP5.2,继续找,在http://museum.php.net/php5/ 下载了pecl-5.2.6-Win32.zip 文件,解压到本地后修改php.ini,加入extension=php_docblock.dl,还是报错,看到下载的文件名上写的是pecl-5.2.6,看来很可能是不支持5.3。
浪费了整个双休日,计划严重打乱了,没法上机测试,只能对着书上的源码硬啃下第七章来,终究是了解得不够透彻。只能等看完整本书后,有时间装个FREEBSD或是php5.2再试了。
作者: slime 发布时间: 2009-08-24
编辑 | 删除 | 权限设置 | 更多▼ 设置置顶
推荐日志
转到私密记事本
简单 发表于2009年08月24日 22:14 阅读(0) 评论(0)
分类: 读书笔记 权限: 公开
一、SVN版本控制系统
以下是我以前学SVN时用到的资源:
SVN手册:http://svndoc.iusesvn.com/
SVN中文站:http://www.subversion.org.cn/
国内的SVN服务商:http://www.svnhost.cn/
使用SVN时,如果是与同事协作,感觉还是锁定--修改--解锁比较好,用合并方式总觉得不方便。
二、PHPUnit
安装:在命令窗口输入:
pear channel-discover pear.phpunit.de //找到频道
pear install phpunit/PHPUnit //安装
PHPUnit用于针对每个类测试用例。写完一个类后,可以为它写一个phpunit测试类进行调试。phpunit提供数十种断言可供选择。
?zend studio里的phpunit与书中的pear提供的phpunit语法一致,应该是同一个东西,但是书上没写在zend studio下应该如何使用。毕竟在命令窗口下进行测试是一件很麻烦的事,这个需要找个时间补充学习。
为每个类编写测试包的好处在于,以后每次对类进行修改,都可以简单地进行完善的错误检测,而不会顾此失彼,发生错误。
三、Phing 自动部署PHP应用程序
这个工具通过XML格式的配置脚本,搜索SVN,利用PHPUNIT的TEST脚本下载和验证所有程序,然后把它们复制到指定文件夹中。
适用于网站维护,比如运行同一程序的多个站点,或是同一程序的镜像站点
四、Xinc 持续集成服务器
Xinc监控SVN存储库的变化,并在检测到变化时自动调用Phing
五、Xdebug执行基准测试
这个工具用于跟踪代码执行。
?这又是一个PECL文件,在找到支持5.3.0的编译文件之前,我仍然无法测试它
? Zend studio下有同样功能的图形化工具。
作者: slime 发布时间: 2009-08-24
编辑 | 删除 | 权限设置 | 更多▼ 设置置顶
推荐日志
转到私密记事本
简单 发表于2009年08月25日 23:01 阅读(0) 评论(0)
分类: 读书笔记 权限: 公开
SPL(标准PHP库)是PHP5面向对象功能中最重要的部分,在PHP5.2版中,,这个特性得到了很大的扩充。
一、SPL在引擎层次上提供以下六个类和接口:
1、arrayAccess:允许创建可以被当作数组的类
2、Exception:所有异常类的基类
3、Iterator:可以使对象和foreach这样的循环结构一起工作
4、IteratorAggregate:允许将Iterator要实现的方法放到其它类去实现
5、Serializable:自动序列化类,确定类被正确地持久化保存和恢复
6、Traversable:这是一个内部接口,被Iterator和IteratorAggregate接口用来确定某个类是否可以用foreach来迭代访问,用户不能直接实现这个类。
二、迭代器
实现Iterator接口,可以在foreach循环中访问对象、数据库结果集和文件等,第十章将详细讲解内置迭代器的类型和用法。
三、数组重载
通过ArrayAccess接口,将对象作为数组使用。ArrayAccess接口自身没有定义一个统计函数,可以通过实现countable接口中来执行统计功能
四、观察者模式
允许某个类观察另一个类的状态,当被观察类的状态发生变化时,这个模式会得到通知。
五、序列化
serializable会将基类的私有成员序列化成字串形式
六、SPL自动加载
通过__autoload魔术方法自动加载类
七、对象标识符
为每个类的实例生成一个标识符
作者: slime 发布时间: 2009-08-25
编辑 | 删除 | 权限设置 | 更多▼ 设置置顶
推荐日志
转到私密记事本
简单 发表于2009年08月29日 22:39 阅读(0) 评论(0)
分类: 读书笔记 权限: 公开
一、为什么使用MVC
最近几年一直流行MVC,视图和程序分开当然是一开始就坚决支持的,想当年我刚上手PHP时,就无师自通地用include包含模板的方式来分割视图和程序,一年之后,后来大名鼎鼎的smarty才开始在国内受到推崇--自己佩服一下自己先--但是为什么要把model和controller分开,确实一直没怎么理解。这一章用简单的几句话就解释得很清楚了:
1、MODEL:开发人员负责数据库管理、算法、架构和数据校验等方面相关的技能;
2、VIEW:设计人员处理视图并负责实现应用程序的外观;
3、CONTROLLER:集成人员将设计人员和开发人员的工作连接在一起。集成人员的经验通常比开发人员的要少,他们负责切割静态模板并且制作应用程序所需的动态区域。
这里的意思就很清楚了,在公司运作中,应该由老手做MODEL,新手做CONTROLLER。想想确实是这样,把难点部分都放到model里进行处理,那么新手只需要一个详细的接口文档就可以开展工作。controller部分的工作量很大,但是技术含量相对较低,很容易就能上手,确实适合新手上手练习。这样即有利于培养新人,又降低了企业的运行成本。
不过,视图层其实也已经越来越具备技术含量,甚至已经出现了一个新的职位叫“页面架构师”,专门负责页面的HTML/CSS/JAVASCTIPT/FLASH效果,这些工作,似乎不是一个新人可以胜任的,但把集成部分交给页面架构师来做,似乎也不那么正确,毕竟页面架构师的经验通常仅限于前台表现,也未必愿意学习后台技术。所以,一个程序的具体人员结构,应该还要根据实际情况来定吧。
二、工作流程
本节中提到的工作流程与我之前看到的一些UML教程和软件工程方法差异较大,但却与我公司和圈子里其它公司的工作模式出人意料的相似:
1、设计人员根据业务需求和程序所要实现的功能制作一个静态的、单独的原型设计(views);
2、开发人员审核并确保所有功能可行且足够安全,符合隐私策略,如发现问题返回第一步,否则创建开发计划,建立API模型(model),交给集成人员;
3、集成人员将静态设计转化为模板(views),编写一个控制器(controllers);
4、开发完成,进入测试阶段。
三、MVC应用程序布局
1、采用mod_rewrite功能将请求重新定向到引导文件。引导文件负责初始化框架,包括加载文件、读取配置数据、将URL解析成可以被动作读取的信息,以及填充封装请求信息的对象等操作。最后,它还负责初始化控制器程序;
2、动作和控制器(controllers),引导完成后,前端控制器被实例化,并接管程序运行。前端控制器用来解释请求变量的内置类,它把代码的执行路由到用户自定义的类上并调用用户定义的方法,这个方法称为动作(action)。在这个方法中,将实例化模板类,解析视图模板,并输出结果;
3、模型(models),存在于公共位置,等待被自动加载。它提供了所需的数据操作和解析功能;
4、视图(views),可以用包括PHP本身在内的任何模板语言编写,在视图中应该只显示数组而不是数据对象,不要在视图中包含任何处理逻辑和数据操作。
四、选择MVC框架的标准:这个就不用选了,当然是ZEND FRAMEWORK。和书中说到的标准不同,我个人认为,最重要的标准是:哪个的后台比较硬。ZEND和IBM两家支持,这个后台足够了,所以,不用再考虑其它了。
五、实现MVC框架。书中给出一个简单的实例,表达了框架的实现方法,由此解释了ZF框架的运行机制。
1、建立一个目录结构,实例中的结构与ZF的目录结构基本一致;
2、用.htaccess实现mod_rewrite方法;
3、创建引导脚本,加载前端控制器、控制器和视图,并初始化前端控制器;
4、前端控制器采用单例模式,分析输入的URI,根据路由指定controller、action和参数的值;
5、控制器,就是前面多次提到的controller,实例化需要的model,产生数据绑定view视图并正确输出
6、视图模型创建变量的作用域,如$view->name,视图模板生成显示效果
7、URL参数,可以通过控制器获取URL参数并进行处理比如用于显示。
作者: slime 发布时间: 2009-08-29
233页:日志记录插件代码
public function routeStartup($request)
会出错,必须改成这样:
public function routeStartup(Zend_Controller_Request_Abstract $request)
作者: slime 发布时间: 2009-09-24
作者: slime 发布时间: 2009-09-24
作者: linscan 发布时间: 2009-10-18
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28