‘壹’ 学习php需要掌握哪些东西
3、工具:必须至少熟练使用一种IDE的开发工具,例如:Eclipse、Netbeans、zend或者editplus,ultraedit,包括进行工程管理、常用选项的设置、PHP插件的安装配置以及进行调试。 4、API:PHP的核心API是非常庞大的,但是有一些内容笔者认为是必须熟悉的,否则不可能熟练的运用PHP,包括: ◆ 文件目录处理函数包80%以上的函数的功能的灵活运用。 ◆ 日期时间函数中的80%以上的函数的功能的灵活运用 ◆ 数学函数库中的100%的内容。 ◆ 网络库中的60%以上的内容,对各个函数的功能比较熟悉。 ◆ 字符串处理函数下的60%以上的内容,特别是各种处理函数。 ◆ 正则表达式函数下的90%以上的内容,特别是各种正则处理 ◆ 一些安全库下的40%以上的内容,如果对于安全没有接触的话根本就不可能掌握PHP ◆ XML处理,熟悉SAX、DOM以及JDOM的优缺点并且能够使用其中的一种完成XML的解析及内容处理。 ◆ 图形图像函数库下的80%以上的内容,特别是一些图像生成和处理 ◆ MySQL 数据库函数下的90%以上的内容,特别是处理各种数据的函数 ◆ 数组处理函数下的90%以上的内容,特别是各种操作处理函数 ◆ 其它PEAR,PECL,和一些扩展类库中的80%以上的内容,特别是一些常用的类的处理 ◆ 针对不同的需求,查找不同的函数库。 5、测试:必须熟悉使用phpunit编写测试用例完成代码的自动测试。 6、管理:必须熟悉使用xinc, phing等完成工程管理的常用任务,例如工程编译、生成phpdoc、生成、版本控制、自动测试。 7、排错:应该可以根据异常信息比较快速的定位问题的原因和大致位置。 8、思想:必须掌握OOP的主要要求,这样使用PHP开发的系统才能是真正的PHP系统。 9、规范:编写的代码必须符合流行的编码规范,这样程序的可读性才比较好。 10、博学:掌握OOA、OOD、MS SQL Server、Oracle 、Zendframework、cakephp、symfony、模板技术等流行技术,掌握软件架构设计思想、搜索引擎优化、缓存系统设计、网站负载均衡、系统性能调优等实用技术。 浮躁的人容易问:PHP和Java,C#,VB.NET哪个好;--告诉你吧,都好--只要你学好就行; 浮躁的人容易问:PHP有钱途吗:--建议你去抢银行作者:朱志兵
‘贰’ 什么样的测试用例是好的测试用例
1、用例覆盖程度
毫无疑问,这一点应该是最重要的,无需多说,覆盖率最大化是一套测试用例的最重要评价标准,如果漏测就杯具了。2、用例是否已经达到工作量最小化
在满足用例覆盖程度最大化的前提下,应该尽量减小执行用例所需要的工作量。这些方面的方法有不少,如条件覆盖,分支覆盖,正交覆盖等方法。面对不同的测试对象,也有不同的方法来保证:对于网页背后的php逻辑,可以通过在网页上测试后,用一些工具比如xdebug来统计代码覆盖率;对于向外提供接口的server
,采用的方式就是分析在外面暴露的接口设计用例,大致的通过接口参数来估计一下分支判断的情况。
3、用例的分类以及描述是否足够清晰
用例的分类,在这里是指相同类型的用例是否放在一起了。例如:接口类的用例,参数的取值范围是1-3,但是现在却传入4;数据类用例,状态机现在位于状态2,却要求状态跳转到无法到达的4;逻辑类用例,正常功能的产出等。将相同类型的用例放在一起,有助于理清思路,清楚了解用例设计是否完备。
用例的描述,是指描述的清晰程度是否能够形成文档。例如上面参数取值范围的例子,用例这样写:“传入错误的值”或者“传入非1-3的值”,明显没有写成“传入值4”有效。这与写程序一样,总是写闭区间的范围而不是开区间。4、用例是否表明了测试目的
写明用例的测试目的,对文档的易于理解性和工作交接的好处不言而喻,现代软件工程不可能只有一个人在做事情,项目于人员的变动也是难免的。在过程中留下足够的信息,可以在后续工作提高很多效率。5、测试用例的易于维护性
如果被测对象有所升级,测试用例的说明或者脚本是不是容易维护呢?例如在有状态机的情况下,测试用例之间是相互依赖的(即需要一定的执行顺序),这样被依赖的用例修改后,后端不需要同步根据修改。而如果用例之间没有相互依赖关系(如用例是自己造的数据,不是依赖于前端的产出),可能一旦有变化,就需要修改这两个。当然,这两种情况不能绝对的说哪种好,是需要看实际使用时候的情况进行取舍的。
‘叁’ PHP程序员需要具备哪些技能
一名合格的php程序员,他一方面需要掌握php基础知识,也即常用的命令与选项,另一方面,程序员需熟知MySQL的知识,对于HTML+CSS+JavaScript+Ajax等等,能看懂就行。从长远发展来看,php程序员需熟知主流产品,也即php框架,如Discuz/ShopEx/ECShop/ThinkPHP,进而深入学习、掌握php架构设计思想,搜索引擎的优化以及网站的负载均衡等知识。 因此,php的学习不仅要掌握眼前所需技能,还要从职业发展前景角度进一步深入对php知识的学习。由此可以看出,深圳达内php的课程就真正做到了对学员进行整个php知识体系的全面、系统的培训。 深圳达内php整个课程的学习具体从6个阶段进行,即包含Linux操作系统、Nigix、XHTML技术核心、CSS技术核心的Web开发基础;以PHP技术核心、MySQL基础、PHP核心函数库、PHP面向对象编程为主的PHP开发技术 ;Web 2.0 RIA技术,如JavaScript基础、JavaScript高级、jQuery框架、MySQL高级;PHP高级应用(Smarty模板、PHP框架技术);PHP项目实践(T-Shop项目、T-CMS项目)以及互联网高级技术 (SEO、负载均衡、网络安全、HTML5&CSS3、缓存与静态化)等等,由浅入深,逐步深入,对于php程序员理性规划其职业生涯也具有重要意义。
‘肆’ php多重数组叠加其中的值
(1)利用php提供的函数,array_unique和array_diff_assoc来实现
.代码如下:
<?php
function FetchRepeatMemberInArray($array) {
// 获取去掉重复数据的数组
$unique_arr = array_unique ( $array );
// 获取重复数据的数组
$repeat_arr = array_diff_assoc ( $array, $unique_arr );
return $repeat_arr;
}
// 测试用例
$array = array (
'apple',
'iphone',
'miui',
'apple',
'orange',
'orange'
);
$repeat_arr = FetchRepeatMemberInArray ( $array );
print_r ( $repeat_arr );
?>
(2)自己写函数实现这个功能,利用两次for循环
.代码如下:
<?php
function FetchRepeatMemberInArray($array) {
$len = count ( $array );
for($i = 0; $i < $len; $i ++) {
for($j = $i + 1; $j < $len; $j ++) {
if ($array [$i] == $array [$j]) {
$repeat_arr [] = $array [$i];
break;
}
}
}
return $repeat_arr;
}
// 测试用例
$array = array (
'apple',
'iphone',
'miui',
'apple',
'orange',
'orange'
);
$repeat_arr = FetchRepeatMemberInArray ( $array );
print_r ( $repeat_arr );
?>
‘伍’ php判断数组重复,并把重复的数据相加
遍历一次就搞定了
既然你要把单号相同的加起来,就可以认为单号是唯一的,所以单号可以做key
$sourceArr=array();//这里就是你原始数据的数组
$newArr=array();//这里是相加后处理过的数组,以单号为key
foreach($sourceArras$v){
if(array_key_exists($v['id'],$newArr)){
$newArr[$v['id']]['fund']+=$v['fund'];
}else{
$newArr[$v['id']]=$v;
}
}
大概就是这么个意思,不过交易类型、账务类型你可能还要再处理下。
如果最后想得到一个下标从0开始的,非关联数组,再用array_values()函数处理下就OK了
‘陆’ thinkphp 怎么用phpunit 做单元测试
thinkphp使用phpunit的时候,创建一个bootstrap.php文件,大致如下
<?php
define('APP_NAME', 'App');
define('ROOT_PATH', dirname(__DIR__) . '/');//根据测试用例的目录,做相应修改
define('APP_PATH', ROOT_PATH . 'App/');
define('APP_PHPUNIT', true);
// 加载框架入口文件
require(ROOT_PATH . "ThinkPHP/ThinkPHP.php");
?>
APP_PHPUNIT 控制是否执行 App::exec();
‘柒’ php代码覆盖率检查工具有哪些
1. Xdebug
Xdebug是PHP的一个扩展,了解PHP的同学一定不会对它陌生,非常强悍的调试助手,默认并没有开启,需要另外安装,不过多数情况下只需要在php.ini配置文件中开启即可。成功开启Xdebug后,我们便可以在程序中使用以下几个函数:
xdebug_start_code_coverage() // 作用为开始统计覆盖率
xdebug_get_code_coverage() // 作用为获取当前已统计信息
xdebug_stop_code_coverage() // 作用为结束覆盖率统计
2. PHPUnit
属于XUnit家族系列,用于对php代码进行单元测试,基于Xdebug可以方便快捷的对代码进行覆盖率测试,并生成直观的报表。
3. codespy
codespy是纯php开发的轻量级覆盖率统计工具,并不依赖Xdebug。只需要在被测试代码前引入其库文件,便会自动在脚本执行完毕后生成测试报告。该工具是github上托管的开源工具。
4. Pika
河图上的工具,特色是支持手工测试和生存周期控制,详情。其大致原理为在测试机安装并运行Pikagent程序,其可以与服务器进行交互,QA能够通过服务器的web界面控制整个测试流程。
Xdebug适用于测试需求复杂的大型项目,例如函数覆盖、类覆盖等,同时其也很容易与第三方工具交互;PHPUnit主要用于模块的单元测试,同时其规范的case管理也适合大型项目;codespy以其轻量级与简单易扩展,能够胜任大多数的小项目的覆盖率测试需求。
‘捌’ thinkphp怎么用phpunit写测试用例
测试用例
本例中,根目录的index.php的配置如下:
<?php
define('APP_NAME','example');
define('APP_PATH','../example/');
define('APP_PHPUNIT',false);
define('APP_DEBUG',true);
require('../ThinkPHP/ThinkPHP.php');
?>
首次访问之后,生成以下目录结构:
在example站点中新建文件夹,命名为“Testcase”。
测试Model
创建HelloModel.class.php:
<?php
classHelloModelextendsModel
{
publicfunctionsayHello()
{
print'Hello';
return'Hello';
}
}
在Test文件夹中新建Test.php文件作为PHPUnit,其中注意require ThinkPHP作为初始化框架环境,另外在Think.class.php中,修改
start()函数中,App::run()为!APP_PHPUNIT && App::run();
该区分站点运行与测试用例。
<?php
define('APP_NAME','example');
define('APP_PATH','./../../example/');
define('APP_PHPUNIT',true);
require('./../../ThinkPHP/ThinkPHP.php');
_Framework_TestCase{
publicfunctionsetUp(){}
publicfunctiontearDown(){}
}
在TestSayHello中加入测试用例:
publicfunctiontestHelloModel()
{
$hello=D('Hello');
$this->assertTrue($hello->sayHello('Hello')=='Hello');
}
测试Action
修改IndexAction.class.php如下:
<?php
classIndexActionextendsAction
{
publicfunctionindex()
{
$hello=D("Hello");
return$hello->sayHello();
}
}
浏览器访问Index效果:
在TestSayHello中加入测试用例:
publicfunctiontestHelloAction()
{
$hello=newIndexAction();
$this->assertTrue($hello->index()=='Hello');
}
运行效果
运行Test.php效果如下:
Test通过,至此给ThinkPHP加上了单元测试。