Currently Browsing

web开发

用zend framework工具创建项目目录

zend framework的初始化之繁琐是出名的,仅目录的创建就N个,若要手工操作,不仅耗时还容易出错,好在包里面有个好的工具可以自动创建项目和相应的目录。

下面开始吧:

首先解压zend framework的压缩包,然后将bin目录和library目录一起拷贝到 D:/zend下

然后在命令行中进入我们要创建项目的目录,比如

>cd d:

>cd www

然后运行工具自动创建项目newproject

>d:/zend/bin/zf create project newproject

好了 ,现在你可以看到www下已经有了newproject目录了,里面的结构也已经建立好,现在,再把library里面的Zend目录复制到newproject的library目录里去就可以了

最后建立虚拟主机,运行测试~ ok

[转]40条优化php代码的小实例

1、如果一个方法能被静态,那就声明他为静态的,速度可提高1/4;

2、echo的效率高于print,因为echo没有返回值,print返回一个整型;

3、在循环之前设置循环的最大次数,而非在在循环中;

4、销毁变量去释放内存,特别是大的数组;

5、避免使用像__get, __set, __autoload等魔术方法;

6、requiere_once()比较耗资源;

7、在includes和requires中使用绝对路径,这样在分析路径花的时间更少;

8、如果你需要得sexinsex到脚本执行时的时间,$_SERVER['REQUSET_TIME']优于time();

9、能使用字符处理函数的,尽量用他们,因为效率高于正则;

10、str_replace字符替换比正则替换preg_replace快,但strtr比str_replace又快1/4;

11、如果一个函数既能接受数组又能接受简单字符做为参数,例如字符替换,并且参数列表不是太长,可以考虑多用一些简洁的替换语句,一次只替换一个字符,而不是接受数组做为查找和替换参数。大事化小,1+1>2;

12、用@掩盖错误会降低脚本运行速度;

13、$row['id']比$row[id]速度快7倍,建议养成数组键加引号的习惯;

14、错误信息很有用;

15、在循环里别用函数,例如For($x=0; $x < count($array); $x), count()函数在外面先计算;

16、在方法里建立局部变量速度最快,几乎和在方法里调用局部变量一样快;

17、建立一个全局变量要比局部变量要慢2倍;

18、建立一个对象属性(类里面的变量)例如($this->prop++)比局部变量要慢3倍;

19、建立一个未声明的局部变量要比一个初始化的局部变量慢9-10倍;

20、声明一个未被任何一个函数使用过的全局变量也会使性能降低(和声明相同数量的局部变量一样),PHP可能去检查这个全局变量是否存在;

 

21、方法的性能和在一个类里面定义的方法的数目没有关系,因为我添加10个或多个方法到测试的类里面(这些方法在测试方法的前后)后性能没什么差异;

22、在子类里方法的性能优于在基类中;

23、只调用一个参数并且函数体为空的函数运行花费的时间等于7-8次$localvar++运算,而一个类似的方法(类里的函数)运行等于大约15次$localvar++运算;

24、Surrounding your string by ‘ instead of ” will make things interpret a little faster since php looks for variables inside “…” but not inside ‘…’. Of course you can only do this when you don’t need to have variables in the string.

25、当输出字符串时用逗号代替点分割更快些。注意:这只对echo起作用,这个函数能接受一些字符串作为参数;

26、在apache服务器里一个php脚本页面比相应的HTML静态页面生成至少要多花2-10倍的时间,建议多用些静态HTML页面和少量的脚步;

27、除非你的安装了缓存,不然你的php脚本每次被访问都需要被重编译。建议安装个php缓存程序,这样通过去除一些重复的编译来很明显的提高你20-100%的性能;

28、建议用memcached,高性能的分布式内存对象缓存系统,提高动态网络应用程序性能,减轻数据库的负担;

29、使用ip2long()和long2ip()函数把IP地址转成整型存放进数据库而非字符型。这几乎能降低1/4的存储空间。同时可以很容易对地址进行排序和快速查找;

30、使用checkdnsrr()通过域名存在性来确认部分email地址的有效性,这个内置函数能保证每一个的域名对应一个IP地址;

31、如果你在使用php5和mysql4.1以上的版本,考虑使用mysql_*的改良函数mysqli_*;

32、试着喜欢使用三元运算符(?:);

33、在你想在彻底重做你的项目前,看看PEAR有没有你需要的。PEAR是个巨大的资源库,很多php开发者都知道;

34、使用highlight_file()能自动打印一份很好格式化的页面源代码的副本;

35、使用error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在php.ini文件里。可是如果你在用一个共享的虚拟主机,php.ini你不能修改,那么你最好添加error_reporting(0)函数,放在每个脚本文件的第一行(或用require_once()来加载)这能有效的保护敏感的SQL查询和路径在出错时不被显示;

36、使用 gzcompress() 和gzuncompress()对容量大的字符串进行压缩(解压)在存进(取出)数据库时。这种内置的函数使用gzip算法能压缩到90%;

37、通过参数变量地址得引用来使一个函数有多个返回值。你可以在变量前加个“&”来表示按地址传递而非按值传递;

38、Fully understand “magic quotes” and the dangers of SQL injection. I’m hoping that most developers reading this are already familiar with SQL injection. However, I list it here because it’s absolutely critical to understand. If you’ve never heard the term before, spend the entire rest of the day googling and reading.

39、使用strlen()因为要调用一些其他操作例如lowercase和hash表查询所以速度不是太好,我们可以用isset()来实现相似的功能,isset()速度优于strlen();

40、When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don’t go modifying your C or Java code thinking it’ll suddenly become faster, it won’t. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend’s PHP optimizer. It is a still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer.

[转]Phpcms 编码规范——适用于php代码编写

 

转自《phpcms二次开发手册》
 
1.           引言
本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形成良好一致的编程风格。以达到事半功倍的效果,如果有需要本文档会不定期更新。
         版权:        陕西玖肆陆陆网络科技有限公司,保留所有权利
最后更新日期:年11月20 2006
 
2.           适用范围
如无特殊说明,以下规则要求完全适用于phpcms项目,同时也可大部分适用于公司其他PHP项目。
 
3.           标准化的重要性和好处
当一个软件项目尝试着遵守公共一致的标准时,可以使参与项目的开发人员更容易了解项目中的代码、弄清程序的状况。使新的参与者可以很快的适应环境,防止部分参与者出于节省时间的需要,自创一套风格并养成终生的习惯,导致其它人在阅读时浪费过多的时间和精力。而且在一致的环境下,也可以减少编码出错的机会。缺陷是由于每个人的标准不同,所以需要一段时间来适应和改变自己的编码风格,暂时性的降底了工作效率。从使项目长远健康的发展以及后期更高的团队工作效率来考虑暂时的工作效率降低是值得的,也是必须要经过的一个过程。标准不是项目成功的关键,但可以帮助我们在团队协作中有更高的效率并且更加顺利的完成既定的任务。
1.      程序员可以了解任何代码,弄清程序的状况
2.      新人可以很快的适应环境
3.      防止新接触PHP的人出于节省时间的需要,自创一套风格并养成终生的习惯
4.      防止新接触PHP的人一次次的犯同样的错误
5.      在一致的环境下,人们可以减少犯错的机会
6.      程序员们有了一致的敌人
 
4.           PHP编码规范与原则
Continue Reading this Entry

php注释标准

转载自
http://webjin.blogbus.com/logs/42644729.html

4.1 块注释
块注释通常用于提供对文件,方法,数据结构和算法的描述。块注释被置于每个文件的开始处以及每个方法之前。它们也可以被用于其他地方,比如方法内部。在功能和方法内部的块注释应该和它们所描述的代码具有一样的缩进格式。
块注释之首应该有一个空行,用于把块注释和代码分割开来,比如:
/*
* 这里是块注释
*/
块注释可以以/*-开头,这样indent(1)就可以将之识别为一个代码块的开始,而不会重排它。
/*-
* 如果想被忽略,可是使用特别格式的块注释
*
* one
* two
* three
*/
注意:如果你不使用indent(1),就不必在代码中使用/*-,或为他人可能对你的代码运行indent(1)作让步。
4.2 单行注释
短注释可以显示在一行内,并与其后的代码具有一样的缩进层级。如果一个注释不能在一行内写完,就该采用块注释。单行注释之前应该有一个空行。以下是一个代码中单行注释的例子:
if (condition) {
/* 以下代码运行的条件 */

}
4.3 尾端注释
极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空白来分开代码和注释。若有多个短注释出现于大段代码中,它们应该具有相同的缩进。
以下是一个代码中尾端注释的例子:
if ($a == 2) {
return TRUE; /* 对单一条件的说明 */
} else {
return isPrime($a); /* 其余的条件 */
}
4.4 行末注释
注释界定符"//",可以注释掉整行或者一行中的一部分。它一般不用于连续多行的注释文本;然而,它可以用来注释掉连续多行的代码段。以下是所有三种风格的例子:
if ($foo > 1) {
// 第二种用法.

}
else {
return false; // 说明返回值的原因
}
//if ($bar > 1) {
//
// // 第三种用法
// …
//}
//else {
// return false;
//}
4.5 文档注释
文档注释描述php的类、构造器,方法,以及字段(field)。每个文档注释都会被置于注释定界符/**…*/之中,一个注释对应一个类或成员。该注释应位于声明之前:
/**
* 说明这个类的一些 …
*/
class Example { …
注意顶层(top-level)的类是不缩进的,而其成员是缩进的。描述类的文档注释的第一行(/**)不需缩进;随后的文档注释每行都缩进1格(使星号纵向对齐)。成员,包括构造函数在内,其文档注释的第一行缩进4格,随后每行都缩进5格。
若你想给出有关类、变量或方法的信息,而这些信息又不适合写在文档中,则可使用实现块注释(见5.1.1)或紧跟在声明后面的单行注释(见5.1.2)。例如,有关一个类实现的细节,应放入紧跟在类声明后面的实现块注释中,而不是放在文档注释中。
文档注释不能放在一个方法或构造器的定义块中,因为程序会将位于文档注释之后的第一个声明与其相关联。

as3学习入门及首个简单案例

看了几天的书,不曾练手,不动手就容易荒废,所以就有了这第一个as3的例子。

实现功能:点击一次按钮,数字累加1。主要是学习as3新的界面与代码分离模式、基本程序结构、label和button控件的使用,以及时间监听的实现。(小小一个例子,还挺多基础知识的),如图所示

第一步,启动flash cs4.

第二步,建立一个新的fla文件(actionscript3.0)

第三步,将文件保存名为“myLogin.fla”

第四步,在这个项目文件夹中新建一个目录“as3”,新建一个actionscript文件“myLogin.as”,放到目录as3下

第五步,在myLogin.fla的属性中指定文档类,这里为“as3.myLogin”(解释一下,as3表示外部引用的.as文件的目录名,myLogin表示这个as文件里的类名,见后面的代码中class名)

第六步,编辑myLogin.as文件,输入如下代码然后ctrl+enter运行,测试、除错,ok~~
注意,这里我们定义了两个组件(label1和button1),而as3的机制是,必须确保这两个组件在“库”中存在(不一定要在舞台上),所以,我们要先从组件工具箱中将一个label和一个button组件拖放到myLogin.fla的库中去,此问题困扰我许久,老是报错,后来在天地会上终于找到了资料,真是奇怪的as3….
如图:

代码如下:
01 package as3
02 {
03     import flash.display.Sprite;
04     import fl.controls.Label;
05     import fl.controls.Button;
06     import flash.events.MouseEvent;
07     public class myLogin extends Sprite{
08         private var label1:Label;
09         private var button1:Button;
10         public function myLogin(){
11             label1 = new Label();
12             label1.move(5,10);
13             label1.text = “0″;
14             button1 = new Button();
15             button1.label = “提交”;
16             button1.move(5,30);
17             button1.addEventListener(MouseEvent.CLICK,buttonclick);
18             addChild(label1);
19             addChild(button1);
20         }
21        
22         public function buttonclick(e:MouseEvent){
23             var n:int = int(label1.text);
24             label1.text = String(n+1);
25         }
26     }
27 }

代码解释:

1.as3和as2有很大的不同,as3很多地方都重写了,而且尽量避免了as2里直接在时间轴上写代码造成难以维护的现象,所以就出现了我们在.fla文件里引用的类”as3.myLogin”

2.第一行 package as3 表示一个包,有利于更好地管理代码?很像java了吧? 如果你的.as文件和.fla文件在同一级目录,应该可以省略这个“as3”,不过为了结构清晰,还是单独把.as文件放到一个目录吧(目录名不要用actionscript的关键字,如“as”)

3.第3行到第6行 import 导入一些必需的类,如button支持、lablel支持、基础显示类sprite。

4.第7行 定义类 myLogin,继承自Sprite类。

5.第8、9行,定义一个label和一个button组件

6.10行开始是该类的构造函数,在里面对label和button初始化,并对一些属性进行了赋值,move方法将这两个组件放到合适的位置。

7,17行中,将一个鼠标点击事件绑定到button1上,处理函数是buttonclick

8.18、19行,addChild()方法将这两个组件添加到舞台上去。

10.22行开始即那个按钮的鼠标单击事件处理函数,大概意思是,点击的时候,得到label1的text值,将其转换为整数并赋给变量n,然后将n+1后再转换为字符串,更新label的text为+1后的数字。