PHP对战ASP:这还值得讨论吗?
什么是PHP
最近学习PHP5接口的过程中遇到了困难 ,书中说是实现多重继承的一种方式,但我依然不知道具体该如何实现。在网上查PHP接口的资料很少,就查了java的,其实基本上都差不多。看完《澄清Java(接口与继承)》这篇文章才恍然大悟,原来我一开始理解就有误,所谓的多重继承是指接口继承类,而不是类继承接口。
文章中提到了OO的抽象,正如文章中的那句话——"抽象就是抽去像的部分",很形象,以前想到抽象总是认为很难理解,抽象嘛,哈哈,现在就很容易理解了,这也正是接口和抽象类所要做的事情。
文章中还有很多观点也让我受益匪浅,罗列如下:
OO的精髓,我以为,是对对象的抽象。
接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。
继承的意义也在于抽象,而不是代码重用。
看完这篇文章,现在基本上理解接口、抽象类、继承该如何应用了。
别每天OO,这个配置怎么改,这段代码哪错了,没劲,好的程序不光是代码写的好,整体架构很重要,多了解程序之外的东西,这篇不再单单是程序方面的东西了,会写到从程序到服务器的设置,会比较多,但个人的经验有限,知道的就这么多,不知道的我也没法写呀, 文章说的不好大家就当我说梦话得了。
把PHP安装为ApacheDSO
PHP经常和ApacheWeb服务器一道用于Linux/Unix平台。当我们在Apache环境下安装PHP的时候,你有三种安装模式可供选择:静态模块、动态模块(DSO)和CGI。
我建议你最好把PHP安装为Apached的DSO,这种安装模式的维护和升级都相当简单。比方说,假设你原先只安装了PHP的数据库支持功能。可过了几天之后你又决定要为PHP添加加密功能。很简单,你只要键入makeclean命令,然后增加新的配置选项,接着再执行make和makeinstall命令即可。这样,新的PHP模块就会被安装到Apache上的恰当位置,你只要重新启动Apache就一切OK了,当然,整个过程完全不用重新编译Apache。
安装新版本的Apache以及安装作为ApacheDSO的PHP的简单步骤如下所示:
1.从Apache软件基金会这一站点下载Apache服务器软件的最新版本源代码。
2.把代码文件放到/usr/local/或者/opt/等合适的目录下。
3.用Gunzip命令对代码文件解压缩,然后你可以得到相应的*.tar文件。
4.键入以下的解包命令把以上的tar文件放到形为apache_[version]的目录下:
tar-xvfapache_[version].tar
5.进到/usr/local/apache_[version]目录(或者在上面步骤中你所指定的目录)。
6.键入下面的配置命令,用你设定的路径(比如/usr/local/apache[version]等,注意后面不要跟斜线!)取代[path]参数,同时你还要启用mod_so参数以允许Apache使用DSO。
./configure–prefix=[path]–enable-module=so
7.回到命令提示行键入make命令并等待命令执行完成再次回到命令提示状态下。
8.键入makeinstall。
到这个时候,编译器即可创建最终的目录并返回到系统的命令提示状态下。
接下来安装PHP:
1.访问PHP主页的下载区域选中最新版本源代码的链接。
2.把下载的文件放到/usr/local/或者/opt/等适当的目录下。
3.用Gunzip命令对代码文件解压缩,然后你可以得到相应的*.tar文件。
4.键入以下的解包命令把以上的tar文件放到形为php-[version]的目录下:
tar-xvfphp-[version]
5.进到/usr/local/php-[version]目录下(或者你指定的目录)。
现在即可编译PHPDSO,其实这里只需要一个必要的配置选项–with-apxs(Apachebin目录下的一个文件)–不过,为了系统配置更为全面,我们在这里还增加了对MySQL数据库的支持。
./configure–with-mysql=/[pathtomysql]–with-apxs=/[pathtoapxs]
6.回到命令提示行下键入make命令并等到命令执行完成再次回到命令提示状态下。
7.键入makeinstall命令。
在这个时候,编译器将会创建最终的DSO,并把它放在Apache模块目录下,同时会为你修改Apache的httpd.conf配置文件,之后系统回到命令提示状态下等待你输入新指令。然后,你即可打开Apache的httpd.conf配置文件做一些修正:
1.找到有ServerAdmin字样的一行,加入你自己的电子邮件地址,如下所示:
ServerAdminyou@yourdomain.com
2.找到以ServerName开头的一行,把后面的参数修改为实际值,比如:
ServerNamelocalhost
3.找到下面一段:
#AndforPHP4.x,use:
#
#AddTypeapplication/x-httpd-php.php
#AddTypeapplication/x-httpd-php-source.phps
修改这些配置行以便取消PHP4.0下的某些加在AddType之前的注释,同时你应该添加一些为PHP所使用的文件扩展名,修改后的以上各行看起来可能会是下面这样子:
#AndforPHP4.x,use:
#
AddTypeapplication/x-httpd-php.php.phtml
AddTypeapplication/x-httpd-php-source.phps
保存以上的配置文件,回到上级目录,键入以下命令即可启动Apache:
./bin/apachectlstart
如果启动期间没有出现什么问题,你即可测试Apache和PHP的安装情况,方法是创建一个名叫phpinfo.php的文件,其中包含了以下的代码行:
<?phpinfo()?>
保存该文件并把它放置在Apache的文档根目录下(htdocs),然后启动你的Web浏览器,在浏览器地址栏里键入http://localhost/phpinfo.php,浏览器即会以很大的篇幅显示出PHP和Apache系统的各个变量和变量值。
如果你想要重新设置PHP,你需要做的不外乎是执行makeclean命令,然后执行带有新配置选项的./configure命令,接着执行make和makeinstall。这样,Apache模块目录中就会出现一个新模块,你只要重启Apache以装载新模块。以前的许多头疼问题现在就迎刃而解了。
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况, 新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动。
PHPUnit命令行测试工具是通过phpunit命令调用的。如下代码显示如何通过PHPUnit命令行测试工具运行测试。
phpunitArrayTest
PHPUnit2.3.0bySebastianBergmann.
Time:0.067288
OK(2tests)
对每个测试,PHPUnit命令行测试工具打印一个字符表示进程:
·测试成功打印“.”。
·运行测试方法是发生了断言失败打印“F”。
·运行测试方法是发生了错误打印“E”。
·测试没有完成或测试没有实现打印“I”(见本书后“未完成的测试”一章)。
PHPUnit可以区分失败和错误。一个失败是PHPUnit的断言违例,错误是一个意料外的异常或一个PHP错误。有时候这种差别是有用的,因为错误相比失败更容易修正。如果你有一大串问题列表,最好先解决所有错误,然后看看有没有失败遗留下来。
让我们看看如下一些代码命令行测试工具的选项:
phpunit–help
PHPUnit2.3.0bySebastianBergmann.
Usage:phpunit[switches]UnitTest[UnitTest.php]
–coverage-data<file>Writecode-coveragedatainrawformattofile.
–coverage-html<file>Writecode-coveragedatainHTMLformattofile.
–coverage-text<file>Writecode-coveragedataintextformattofile.
–testdox-html<file>WriteagiledocumentationinHTMLformattofile.
–testdox-text<file>WriteagiledocumentationinTextformattofile.
–log-xml<file>LogtestprogressinXMLformattofile.
–loader<loader>TestSuiteLoaderimplementationtouse.
–skeletonGenerateskeletonUnitTestclassforUnitinUnit.php.
–waitWaitsforakeystrokeaftereachtest.
–helpPrintsthisusageinformation.
–versionPrintstheversionandexits.
phpunitUnitTest
运行类UnitTest提供的测试,该类应该定义在源文件UnitTest.php中。
类UnitTest必须继承PHPUnit2_Framework_TestCase类,或是提供了公有静态方法suite,并返回PHPUnit2_Framework_Test对象的类(例如,类PHPUnit2_Framework_TestSuite的一个实例)
phpunitUnitTestUnitTest.php
运行类UnitTest提供的测试,该类要定义在命令指定的源文件(UnitTest.php)中。
–coverage-data,–coverage-html,and–coverage-text
控制运行测试的代码覆盖信息的分析和集合(参见本书后代码覆盖分析一节)
–testdox-htmland–testdox-text
以HTML或普通文本格式生成运行测试的敏捷文档(参见本书后的“测试的其他用途”一章)
–log-xml
生成运行测试的XML格式的日志文件。
下一个例子显示为ArrayTest中的测试生成的XML日志文件。
<?xmlversion="1.0"encoding="UTF-8"?>
<testsuites>
<testsuitename="ArrayTest"tests="2"failures="0"errors="0"time="0.020026">
<testcasename="testNewArrayIsEmpty"class="ArrayTest"time="0.014449"/>
<testcasename="testArrayContainsAnElement"class="ArrayTest"time="0.005577"/>
</testsuite>
</testsuites>
下面的XML日志文件是为名为FailureErrorTest的测试类两个测试生成的,一个是testFailure,一个是testError。这显示了失败和错误是如何分别表示的。
<?xmlversion="1.0"encoding="UTF-8"?>
<testsuites>
<testsuitename="FailureErrorTest"tests="2"failures="1"errors="1"time="0.013603">
<testcasename="testFailure"class="FailureErrorTest"time="0.011872">
<failuremessage=""type="PHPUnit2_Framework_AssertionFailedError"></failure>
</testcase>
<testcasename="testError"class="FailureErrorTest"time="0.001731">
<errormessage=""type="Exception"></error>
</testcase>
</testsuite>
</testsuites>
–loader
指定将要使用的测试套件加载器。
标准测试套件加载器会在当前工作目录和PHP的include_pathconfiguration指令定义的路径中寻找源文件。按照PEAR的命名规则,形如Project_Package_Class的类名会映射到的源文件为Project/Package/Class.php。
–skeleton
为类Unit(在文件Unit.php中)生成一个名为UnitTest(在文件UnitTest.php中)的测试用例类的框架。对原始类的每个方法,在生成的测试用例类中提供了一个未完成的测试用例(见本书后的“未完成测试”部分)。
下面的例子显示了如何为一个名为Sample的类生成一个测试类的框架。
phpunit–skeletonSample
PHPUnit2.3.0bySebastianBergmann.
WrotetestclassskeletonforSampleto
SampleTest.php.
phpunitSampleTest
PHPUnit2.3.0bySebastianBergmann.
I
Time:0.007268
Therewas1incompletetestcase:
1)testSampleMethod(SampleTest)
OK,butincompletetestcases!!!
Testsrun:1,incompletetestcases:1.
当你为现有代码书写测试时,你不得不重复很多相同的代码片断,如:
publicfunctiontestSampleMethod(){}
PHPUnit能帮助你分析现有代码,生成测试用例类的框架。
–wait
每个测试结束时,等待一次击键。这很有用,特别是你在一个只有测试一直运行在打开的窗口中运行测试时。
提示当被测试代码中有PHP语法错误时,文本界面的测试会直接退出,不输出任何错误信息。标准的测试套件加载器会检查测试套件的源文件的PHP语法错误,但是,它不会检查测试套件包含的源文件的语法错误。PHPUnit的未来版本会用在砂箱中PHP解释器类解决这个问题。
| 以下为引用的内容:
一、编码范围 |
Copyright © 2008-2010 52lamp.com.cn All rights reserved
版权申明:本站文章部分来自网络,如有侵权,请联系sunliwhd@gmail.com ,我们收到后立即删除,谢谢!