php php编程高手容易容易容易容易容易容易容易那样那样那样那样那样那样那样那样那样的的的的能够飞快飞快飞快地编写几几条简单简单的的代码代码代码代码去去去解决解决解决一一一一个个个复杂多的问题以下三条准则是名成熟的的的的的程序员程序员在编程中应该首先首先遵循的的的准则准则准则准则。。()
◆懒惰懒惰金
◆编写漂亮代码代码
◆追求的,而不是编程速度速度
懒惰是金
做一的吗?这个想法奇怪!因为!【企业建设哪家】个上的人就是是了。但但因为程序员太太太忙忙了,所以了了了了忙忙忙忙忙所以所以所以所以所以所以才才才才应该应该在在在在编程编程时学会偷懒偷懒。
,大胆,大胆的的代码,把程序程序程序程序你你自己的程序程序或者项目项目去。。其二二二是编写编写一些有用有用的的的的个个一去了的,自然自然可以懒惰了。这两种偷懒偷懒的的方法方法都都适合适合
,php是自由的中中成长的一门。在世界世界世界各各地地,有地地地地地地地地地的的程序员程序员聪明才智编写代码。你每都都一些一些一些一些一些网站网站,邮件列表,新闻组发现发现大量的的的
这样这样,我是鼓励整天着让别人代码代码代码代码代码代码时间其次其次,php中,你你地的函数库函数库,这样自己函数库函数库
下面为的的函数函数函数函数函数函数函数函数来自网的的一些开放源源代码代码代码代码的的项目项目项目项目项目项目会发现自己无穷。
1.通用数据库函数函数
cgi函数,php php的优点是很强大处理处理能力。。。。。。,php中,php中,对于对于对于对于对于的数据库都使用使用一些特定特定的的来来来大大降低的可移植性,这这为编程的带来了很多不便。
在上上上上通过封装类了这个问题。。他们他们了统一的的的函数函数函数函数用来用来用来处理处理处理任何任何流行流行数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库数据库(高端网站)
就笔者,非常,非常使用函数,因为这些这些这些直接直接简单的诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如诸如,,,,,,,,,,,,,,,考虑使用何数据库。需要这些函数函数,你可以通过访问访问以下几:
◆
◆
◆
2.变量调试函数
php php程序调试一件的的事事事的的的的的像像像像像等1回声语句语句来php php的的。的几个函数可以让让随时查看程序程序中任何任何变量变量的的
函数ss_array_as_string(&$ array,$ column = 0){
$ str =“ array(n”;
while(list($ var,$ val)=每个($ array)){
for($ i = 0; $ i < $column+1; $i++){
$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";
}
$str .= $var. ==> ;
$str .= ss_as_string($val, $column+1)." n";
}
for ($i = 0; $i < $column; $i++){
$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";
}
return $str.);
}
function ss_object_as_string (&$object, $column = 0) {
if (emptyempty($object->classname)) {
return "$object";
}
else {
$str = $object->classname."( n";
while (list(,$var) = each($object->persistent_slots)) {
for ($i = 0; $i < $column; $i++){
$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";
}
global $$var;
$str .= $var. ==> ;
$str .= ss_as_string($$var, column+1)." n";
}
for ($i = 0; $i < $column; $i++){
$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";
}
return $str.);
}
}
function ss_as_string (&$thing, $column = 0) {
if (is_object($thing)) {
return ss_object_as_string($thing, $column);
}
elseif (is_array($thing)) {
return ss_array_as_string($thing, $column);
}
elseif (is_double($thing)) {
return "Double(".$thing.")";
}
elseif (is_long($thing)) {
return "Long(".$thing.")";
}
elseif (is_string($thing)) {
return "String(".$thing.")";
}
else {
return "Unknown(".$thing.")";
}
}
需要的时候,在程序中简单地加入下面的一条代码即可查看程序中的所使用的变量(包括数组和对象)的类型和值:
echo ss_as_string($my_variable);
使用下面的语句,我们可以直接查看程序中所有的变量的值:
echo ss_as_string($GLOBALS);
3. 控制Log信息的函数
调试PHP程序的另外一种重要的方法就是查看Log信息。如果能够方便地控制Log信息的级别以及Log信息的显示内容,将会给程序调试带来更多的便利。下面的几个函数可以方便地实现这个功能。
$ss_log_level = 0;
$ss_log_filename = /tmp/ss-log;
$ss_log_levels = array(
NONE => 0,
ERROR => 1,
INFO => 2,
DEBUG => 3);
function ss_log_set_level ($level = ERROR) {
global $ss_log_level;
$ss_log_level = $level;
}
function ss_log ($level, $message) {
global $ss_log_level, $ss-log-filename;
if ($ss_log_levels[$ss_log_level] < $ss_log_levels[$level]) {
// 不显示Log信息
return false;
}
$fd = fopen($ss_log_filename, "a+");
fputs($fd, $level. - [.ss_timestamp_pretty().] - .$message."n");
fclose($fd);
return true;
}
function ss_log_reset () {
global $ss_log_filename;
@unlink($ss_log_filename);
}
在上面的函数中,有四个Log级别变量。运行PHP程序时,只有当Log的级别低于预设的级别值时,Log信息才可以被记录和显示出来。例如,在程序中加入如下的一条语句:
ss_log_set_level(INFO);
那么,运行PHP程序时,只有ERROR和INFO级别的LOG信息才能被记录和显示出来,DEBUG级的信息则被忽略了。除此之外,我们还可以设定显示的信息内容,其语句如下:
ss_log(ERROR, "testing level ERROR");
ss_log(INFO, "testing level INFO");
ss_log(DEBUG, "testing level DEBUG");
你也可以随时使用下面的语句清空LOG信息:
4.速度测试函数
为了优化代码,我们需要一种可以测试代码运行时间的方法,从而来选择更优的代码。下面的函数可以测试运行代码所需的时间:
function ss_timing_start ($name = default) {
global $ss_timing_start_times;
$ss_timing_start_times[$name] = explode( , microtime());
}
function ss_timing_stop ($name = default) {
global $ss_timing_stop_times;
$ss_timing_stop_times[$name] = explode(, microtime());
}
function ss_timing_current ($name = default) {
global $ss_timing_start_times, $ss_timing_stop_times;
if (!isset($ss_timing_start_times[$name])) {
return 0;
}
if (!isset($ss_timing_stop_times[$name])) {
$stop_time = explode(, microtime());
}
else {
$stop_time = $ss_timing_stop_times[$name];
}
$current = $stop_time[1] - $ss_timing_start_times[$name][1];
$current += $stop_time[0] - $ss_timing_start_times[$name][0];
return $current;
}
现在可以轻松地检查任何一段代码的执行时间了,甚至我们可以同时使用多个计时器,只需在使用上述的几个函数时设定不同的参数作为计时器的名称就可以了。
5.调试和优化数据库的操作
对于数据库来说,运行速度是至关重要的。尽管很多书籍和文章都讲授了一些快速运行数据库的方法,但是所有的方法都必须经过实践的检验。下面我们将把PHPLib函数库中的query()函数和上面介绍的几个函数综合起来编写成新的query()函数,和原先的函数相比,这个函数增加了运行时间的监测功能。
function query($Query_String, $halt_on_error = 1) {
$this->connect();
ss_timing_start();
$this->Query_ID = @mysql_query($Query_String,$this->Link_ID);
ss_timing_stop();
ss_log(INFO, ss_timing_current(). Secs - .$Query_String);
$this->Row = 0;
$this->Errno = mysql_errno();
$this->Error = mysql_error();
if ($halt_on_error && !$this->Query_ID) {
$this->halt("Invalid SQL: ".$Query_String);
}
return $this->Query_ID;
}
1.将后台程序与前端程序分开
在编写PHP程序时,有些代码是用来处理一些事务,例如操作数据库、进行数学运算等,而另外的一些代码则只是事务处理的结果显示出来,例如一些使用echo语句将结果以HTML的格式显示在Web浏览器上的PHP代码以及那些直接嵌入PHP程序的HTML代码。首先我们应该清晰地区分这两种代码,把前者称为后台程序,把后者称为前端程序。
因为PHP是一种嵌入式编程语言,也就是说,所有的PHP代码都可以嵌入到HTML代码之中,这为程序的编写带来了许多便利之处。但是,“物极必反”,如果在一段较长的程序中将PHP代码和HTML代码混合编写,这将使程序杂乱无章,不利于程序的维护和阅读。
所以我们需要尽可能地将这些程序中混杂于HTML代码中的PHP代码移植出来,在专门的文件中将这些代码精品网站建设公司封装成函数,然后在HTML代码中使用include语句来包含这些文件,在适当的位置调用这些函数即可。
这种做法一方面使HTML代码和PHP代码都简单易读,另一方面因为HTML代码需要不断更新,而这种分离的方法可以确保后台程序不会被破坏。同前端程序不同,后台程序更多追求的是稳定、结构化,极少更改,所以应该认真地设计和管理。其实,在设计台程序时,投入大量时间是值得的,“现在栽树,以后乘凉”,在以后的设计工作中将可以轻松地使用现在编写的后台程序。
2.灵活使用包含文件
正如前面所说的那样后台程序应当安排在一系列的包含文件中。包含文件可以通过include语句在需要时动态装入,也可以在php.ini文件中通过使用auto_prepend_file指令预先自动装入。如果使用后一种方法的话,虽然取得了一劳永逸的好处,但是也有一些缺点值得我们注意。下面的一段代码向我们展示了解析一个庞大的包含文件需要一定的时间:
require(timing.inc);
ss_timing_start();
include(test.inc);
ss_timing_stop();
echo
.ss_timing_current().
;
在上面的代码中,test.inc是一个1000行的包含文件,运行的结果显示,解析这个包含文件花费了0.6秒钟,对于一个大型网站来说,这个速度并不是可以忽略不记的。使用包含文件的另外一个缺点是:如果一个文件中的一个语句发生错误,将会使整个网站的PHP程序都无法运行。所以使用起来也及其小心。其实,对包含文件稍做处理,即可以使包含文件只在需要时进行解析。下面的代码使abc.inc文件只在程序需要时才作解析:
if ( defined( __LIBA_INC) ) return;
define( __LIBA_INC, 1 网站建设价格方案 );
3.使用面向对象的编程方法
PHP也是一种面向对象的语言,面向对象的编程方法是的程序员们非常推崇的一种软件设计方法,在PHP编程中可以充分发挥面向对象语言的优势,对编程中的对象进行封装。在前面的代码中,我们使用了面向对象的方法,例如在管理数据库时,我们将query()函数封装进数据库类中,这极大地方便了代码的管理,增加了程序的可读性。
追求程序速度,而不是编程的速度
在网站建设中,程序运行速度和网页下载速度都是关系成败的重要因素。作为一名Web程序员,应该更加注意代码的运行速度。下面介绍的几种方法都在不同程度上提高了代码的运行速度。
1.使用内嵌的HTML代码,而不是PHP的echo语句。
因为PHP是一门嵌入式Web编程语言,可以将HTML代码和PHP代码相互嵌入。但是很多程序员担心在HTML代码中过多的使用""嵌入PHP代码会多次调用PHP解释器,从而降低了PHP代码的运行速度,所以宁愿使用PHP的echo语句来输出HTML代码,而不直接使用HTML代码。
但事实却恰恰相反。每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码,所以,只在需要时才嵌入PHP代码,而大多数的时候直接使用HTML代码输入结果,不但不会降低程序的运行速度,而且因为减少了对echo语句的解析,往往可以提高代码的运行速度。下面的一段代码证明了我们的结论。在这段代码中,我们使用了前面介绍的时间测试函数。
2.使用str-replace而不是ereg-replace
习惯使用Perl进行编程的程序员更加愿意使用ereg_replace完成字符串替换工作,因为在PHP中ereg_replace的用法和Perl中模式匹配的用法相近。但是,下面的这段代码证明,使用str_replace 代替 ereg_replace将可以大大提高代码的运行速度。测试str_replace和ereg_replace的运行速度:
//这段代码测试str_replace的运行速度 emphasis; ?>
for ($i=0; $i<1000; $i++) {
str_replace(i>, b>,$ string)。
;
}
//这这测试测试
for($ i = 0; $ i<1000; $i++) {
ereg_replace(<([/]*)i>, <\1b>, $string).
;
}
3.注意字符串的引用
PHP和其它很多编程语言一样,可以使用双引号("")来引用字符串,也可以使用单引号()。但是在PHP中,如果使用双引号来引用字符串,那么PHP解析器将首先分析字符串中有没有对变量的引用,有变量的话,将对变量进行替换。如果是单引号,则没有如此复杂——直接将单引号包含起来的所有字符串直接显示出来。显然,在PHP编程中,如果使用单引号引用字符串变量要比使用双引号快速一些。
4.在数据库中避免使用联合操作
比起其它的Web编程语言来说,PHP的数据库功能十分强大。但是在PHP中数据库的运行仍然是一件十分费时费力的事情,所以,作为一个Web程序员,要尽量减少数据库的查询操作,同时应该为数据库建立适当的索引。
另一件值得注意的事情是在用PHP操作数据库时,尽可能不使用多个数据表的联合操作,尽管联合操作可以增强数据库的查询功能,但是却大大增加了服务器的负担。为了说明这个问题,我们可以看看下面的这个简单的例子。
我们在数据库中创建了两个数据表foo和big_foo。在数据表foo中,只有一个字段,包含了从1-1000之间的所有自然数。数据表big_foo同样只有一个字段,但包含了从1-1,000,000之间的全部自然数。所以,从大小上说,big_foo等于foo与它自身进行了联合操作。
$db->QUERY(“从foo中选择 *”);
0.032273秒
$ db-> next_record();
0.00048999999999999
$ db-> query(“插入foo值(null)”);
0.019506秒
$ db-> query(“从foo中select * a s a s a,foo为b”);
17.280596秒
$ db-> query(“从foo中选择 *为a,foo为b,其中a.id> b.id”);
14.645251秒
$ db-> query(“从foo中select *为a,foo as b whew a.id = b.id”);
0.041269秒
$ db-> query(“从big_foo中选择 *”);
25.393672秒
从上面可以发现,对于对于对于两两两两两两条记录数据表进行联合联合联合联合联合联合联合联合
5.注意包括与需要的的区别
在php变成变成,inclage()与例子中,如果变量$ somgthing为
if($ things){
包括(“ Somefile”);
}
但$ $ sosings取取值,下面下面代码将把文件文件
if($ things){
需要(“ somefile”);
}
下面的的例子说明了这个之间之间的不同。
$ i = 1;
while($ i <3){
需要(“ somefile。$ i”);
$ i ++;
}
在中中的文件进来如果要完成这个功能功能功能功能
$ i = 1;
while($ i <3){
包括(“ somefile。$ i”);
$ i ++;
}
6.注意echo和印刷的区别区别
php中echo print的的也相同相同相同相同相同相同相同相同者之间差别差别差别差别差别。。在在在在在在在在代码代码代码代码中可以把把把把作为作为作为作为一个
$ ret =打印“ Hello World”;
这意味着可用一些一些复杂表达式中中,回声则行。。。。。,在同样同样,在在同样同样表达式中中中中中中中中中中中中,在
专业网站设计价格 专业网页建设 网页定制
请立即点击咨询我们或拨打咨询热线: 13968746378,我们会详细为你一一解答你心中的疑难。项目经理在线