php中使用模板方法设计模式

四人组模式最简单的一个,模板方法:创建一个包含骨架方法的抽象的基类,这个骨架方法驱动了需要变化的那些部分,而将一些步骤延迟到子类中。 在这里会用到钩子方法:指那些可以被具体类重载的非抽象方法,基类会定义钩子方法,完全是为了让具体的子类了解正在发生的情况

抽象就是抽去像的部分

大多父类都是抽象类,对对象的抽象,什么时候应该使用继承?只在抽象类中使用,其他情况下尽量不使用。抽象类也是不能实例化的,它仅仅提供一个模版而已,比如mvc中的基类就是一个抽象类,只可继承不可实例化。 继承的意义也在于抽象,而不是代码重用。
而接口的作用,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。
在接口中所有的方法必须声明为public,这是接口的特性。

重构和YAGNI的矛盾

基本上这个问题起因于重构需要耗费时间却没有增加新的功能。而YAGNI的观点是你应该为了眼前的需要做设计而不是未来,这样算是相互抵触吗?
YAGNI的观点是不要加入一些现阶段不需要的复杂性,这也是简单设计这条实践的部分精神。重构可以保证你的设计尽可能的简单,所以当你觉得可以让系统变得更简单的时候,就进行重构。
简单设计这条实践不仅仅是XP利用实践而且也是XP启动实践。只有基于测试、持续集成和重构才能有效的保证简单设计。而同时,简单设计又对于保持变更曲线平缓非常重要。任何不必要的复杂性都会让系统变得难于调整,除非这个调整正是你加入复杂性所预料的调整。不过,人们通常不善于预料未来,所以最好还是努力地保持简单性。同样,人们也不太可能第一次就能做到最简单,因此你需要重构来帮助你更接近这个目标。
因此相对来说只有重构才是真正的YAGNI。

php中用继承的时候先考虑下组合委派

继承的优点不必多说,但是也有不足之处,比如交通工具类里有发动引擎和熄火两个方法,这样做虽然不错,不过自行车是没有引擎的,那么我们可以把引擎单独提取出来做个引擎抽象类,在汽车的实例里先继续交通工具类,然后引用引擎类即可。
这里的组合其实就是一种委派,而委派说明一个对象引用了另一个对象,并不牵扯接口。

分析接口编程

jquery和cakephp的流行,主要是因为他们集成了核心包,留下接口开发多个组件插件包,总体来说是因为他们采用了接口编程的思想才使他们更加敏捷。
接口的优点很明显,看以下代码(自然语言),
//创建一个汽车类,调用drive方法
mycar = new Car;
mycar.drive(100);
//如果这时要处理两种交通工具时,我们可能会用:
if is_car
mycar = new Car;
mycar.drive(100);
else
myplane = new Plane;
myplane . fly(100);
endif
这时代码就有些混乱,另外假设加入了对火车,轮船的处理,那么可重用的代码就很明确,我们可用一个接口实现重用。
mytool = get_tool;
mytool .go(100);
在这里要尽可能使用最通用的类做接口,就是所谓的母类,比如我们可以把汽车类型形容为交通工具,另外也可形容为移动物体
那么后者会更好些,所以一定要用最通用的类型来针对接口编程。
在php中有专门调用接口的implements

设计模式在php中的应用

java和c#中的设计模式多多,如果生搬硬套会失去php动态语言的特性,如今在设计框架时,发现需要运用了很多设计模式,暂时停止对kohana和thinkphp的研究,及对框架的开发,深入分析近十几个设计模式在php中的应用。
1、模板方法
2、策略
3、观察器
4、组合模式
5、迭代器
6、命令模式
7、适配器
8、代理模式
9、装饰器模式
10、单例模式
11、工厂模式
12、生成器
除了常用的设计的模式外,有三种新的设计模式
1、dsl
2、元编程
3、约定优于配置

在windows下安装phpunit

运行PHPUnit需要PHP5的命令行,所以这里需要php的解释器。安装php就不提了.安好之后再接下去做.
常见的安装方法是通过PEAR Install来安装。一般安装php后可能还没有安装pear,但有一个脚本会自行安装pear。在php5的安装目录下,运行go-pear。这样会有一个向导安装pear,一直回车吧。如果安装成功在php5的安装目录下面会有一个pear.bat文件,这样就可以继续安装PHPUnit了。
在命令行找到php安装目录,输入以下命令进行安装
pear channel-discover pear.phpunit.de
pear channel-discover pear.symfony-project.com
pear install phpunit
运行上面命令后,会自动安装PHPUnit,安装完毕后在PHP5的安装目录下会有phpunit.bat这个文件,这样你就有了phpunit的命令行工具,在默认情况下PHP5的安装目录会自动加入到PATH环境变量中。
安装完闭之后你的php.ini里面应该有include_path=”.;D:\php\pear”这一行(注意重起apache让配置生效).
否则以后你require_once ‘PHPUnit/Framework.php’的时候会引用不到.

关于eval的用法

记得06年的时候,刘杰吵着php5里有eval,用着很爽,今天终于用到了,很好很强大。
用法:
class testclass{
function test($a,$b) {
echo $a;
}
}
$p = “1,2″;
$testclass = new testclass();
eval(“\$testclass->test($p);”);
最终结果输出了1,如果在$p前加转义\,那么输出结果为1,2

php框架架构构思

为什么用复数形式做表名

期待cakphp1.3的stable版本

http://thechaw.com是由cakephp1.3建成的,也介绍了1.3的程序和进度

 Page 3 of 9 « 1  2  3  4  5 » ... ; ;Last » ;