知识大全 PHP高手之路(懒惰是金)

Posted 函数

篇首语:最是人间留不住,朱颜辞镜花辞树。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PHP高手之路(懒惰是金)相关的知识,希望对你有一定的参考价值。

PHP高手之路(懒惰是金)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  PHP是一门高效的网络编程语言 由于它具有编写灵活 运行快速等优点 迅速成为Web程序员的首选语言 前不久的一份权威调查表明 现在已经有 %的网站使用PHP作为主要的服务器端编程语言   但是 要成为一名PHP编程高手却并不容易 并不像很多人想象的那样 只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了 真正的PHP高手还需要考虑更多的其它问题 以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则    懒惰是金    编写漂亮的代码    追求程序的速度 而不是编程的速度   一 懒惰是金   做一个懒惰的程序员吗?这个想法太奇怪了!因为这个世界上最忙碌的人可能就是计算机程序员了 但正是因为程序员太忙了 所以才应该在编程时学会偷懒   对于一个程序员来说 懒惰的方法有两种   其一 大胆使用现成的别人的程序代码 把这些代码融入到你自己的程序或者项目中去   其二是编写一些有用的代码建立一个函数库 在将来编写程序时可以顺手拈来 省去了许多重复的劳动 自然就可以懒惰一点了   这两种偷懒的方法都非常适合PHP程序员了   首先 PHP是在自由开放的环境中诞生和成长的一门语言 在世界各地 有成千上万的程序员 他们一直在为PHP的完美而不断奋斗 他们也愿意和别人分享自己的聪明才智和自己编写的代码 你每天都可以从一些PHP网站 邮件列表 新闻组发现大量的优秀的程序代码 这样说 我并不是鼓励你整天等著让别人为你编写代码 但是你可以 站在伟人的肩膀上 充分发扬 拿来主义 聪明地应用别人的程序代码可以节省你大量时间 其次 在PHP中 你可以方便地建立自己的函数库 这样可以在你以后编写程序时省去很多麻烦   下面笔者为大家介绍几个通用的函数 这些函数有的来自网上的一些开放源代码的项目 有的精选自邮件列表 如果你能把它们加入到你自己的函数库中 迟早你将会发现自己受益无穷    通用数据库处理函数   和其它的CGI函数相比 PHP的优点之一是具有很强大的数据库处理能力 但是 在PHP中 对于不同的数据库都使用一些特定的函数来专门处理 缺少通用的数据库处理函数 这大大降低了程序代码的可移植性 这也为初学编程的朋友带来了很多不便   在网上 许多程序员都通过封装类解决了这个问题 他们编写了统一的函数用来处理任何流行的数据库——不管是在Linux世界深受欢迎的Mysql还是在Windows平台上广泛流行的SqlServer 就笔者个人来说 非常喜欢使用这些函数 因为可以直接使用一些简单的诸如 query next_record 之类的函数 而不需要考虑数据库的连接 数据库句柄这些复杂的东西 更不需要考虑使用的是何种数据库   如果你需要这些函数 你可以通过访问以下的几个网址而得到   _blank>//phplib netuse de/   _blank>//phpclasses UpperDesign /browse /package/   linuxbox / target=_blank>//phpdb linuxbox /    变量调试函数   PHP程序的调试一直是一件让人头疼的事 它既不像VB等高级语言那样有集成的编译调试环境 也不想Perl那样可以在Linux或者DOS环境下直接运行 其实 我们完全可以通过灵活地使用echo语句来完成对PHP的调试工作   下面的几个函数可以让你随时查看程序中任何变量的类型及其值   function ss_array_as_string (&$array $column = )       $str = Array( n ; while(list($var $val) = each($array))        for ($i = ; $i < $column+ ; $i++)          $str = &nbsp;&nbsp;&nbsp;&nbsp; ;          $str = $var ==> ;     $str = ss_as_string($val $column+ )     n ;        for ($i = ; $i < $column; $i++)        $str = &nbsp;&nbsp;&nbsp;&nbsp; ;        return $str );      function ss_object_as_string (&$object $column = )       if (empty($object->classname))         return $object ;        else         $str = $object->classname ( n ; while (list( $var) = each($object->persistent_slots))           for ($i = ; $i < $column; $i++)            $str = &nbsp;&nbsp;&nbsp;&nbsp; ;            global $$var;      $str = $var ==> ;      $str = ss_as_string($$var column+ )      n ;          for ($i = ; $i < $column; $i++)          $str = &nbsp;&nbsp;&nbsp;&nbsp; ;          return $str );          function ss_as_string (&$thing $column = )       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);    控制Log信息的函数   调试PHP程序的另外一种重要的方法就是查看Log信息 如果能够方便地控制Log信息的级别以及Log信息的显示内容 将会给程序调试带来更多的便利 下面的几个函数可以方便地实现这个功能   $ss_log_level = ;   $ss_log_filename = /tmp/ss-log;   $ss_log_levels = array(   NONE =>   ERROR =>   INFO =>   DEBUG => );   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信息   ss_log_reset();    速度测试函数

  为了优化代码 我们需要一种可以测试代码运行时间的方法 从而来选择最优的代码 下面的函数可以测试运行代码所需的时间   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 ;        if (!isset($ss_timing_stop_times[$name]))         $stop_time = explode( microtime());        else         $stop_time = $ss_timing_stop_times[$name];        $current = $stop_time[ ] - $ss_timing_start_times[$name][ ];    $current += $stop_time[ ] - $ss_timing_start_times[$name][ ];    return $current;      现在可以轻松地检查任何一段代码的执行时间了 甚至我们可以同时使用多个计时器 只需在使用上述的几个函数时设定不同的参数作为计时器的名称就可以了    调试和优化数据库的操作   对于数据库来说 运行速度是至关重要的 尽管很多书籍和文章都讲授了一些快速运行数据库的方法 但是所有的方法都必须经过实践的检验 下面我们将把PHPLib函数库中的query()函数和上面介绍的几个函数综合起来编写成新的query()函数 和原先的函数相比 这个函数增加了运行时间的监测功能   function query($Query_String $halt_on_error = )       $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 = ;    $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;   

  二 编写漂亮的代码    将后台程序与前端程序分开      在编写PHP程序时 有些代码是用来处理一些事务 例如操作数据库 进行数学运算等 而另外的一些代码则只是事务处理的结果显示出来 例如一些使用echo语句将结果以HTML的格式显示在Web浏览器上的PHP代码以及那些直接嵌入PHP程序的HTML代码 首先我们应该清晰地区分这两种代码 把前者称为后台程序 把后者称为前端程序   因为PHP是一种嵌入式编程语言 也就是说 所有的PHP代码都可以嵌入到HTML代码之中 这为程序的编写带来了许多便利之处 但是 物极必反 如果在一段较长的程序中将PHP代码和HTML代码混合编写 这将使程序杂乱无章 不利于程序的维护和阅读 所以我们需要尽可能地将这些程序中混杂于HTML代码中的PHP代码移植出来 在专门的文件中将这些代码封装成函数 然后在HTML代码中使用include语句来包含这些文件 在适当的位置调用这些函数即可   这种做法一方面使HTML代码和PHP代码都简单易读 另一方面因为HTML代码需要不断更新 而这种分离的方法可以确保后台程序不会被破坏   同前端程序不同 后台程序更多追求的是稳定 结构化 极少更改 所以应该认真地设计和管理 其实 在设计台程序时 投入大量时间是值得的 现在栽树 以后乘凉 在以后的设计工作中将可以轻松地使用现在编写的后台程序    灵活使用包含文件   正如前面所说的那样 后台程序应当安排在一系列的包含文件中 包含文件可以通过include语句在需要时动态装入 也可以在php ini文件中通过使用auto_prepend_file指令预先自动装入   如果使用后一种方法的话 虽然取得了一劳永逸的好处 但是也有一些缺点值得我们注意 下面的一段代码向我们展示了解析一个庞大的包含文件需要一定的时间   require(timing inc);   ss_timing_start();   include(test inc);   ss_timing_stop();   echo    ss_timing_current()   ;   ?>   在上面的代码中 test inc是一个 行的包含文件 运行的结果显示 解析这个包含文件花费了 秒钟 对于一个大型网站来说 这个速度并不是可以忽略不记的   使用包含文件的另外一个缺点是 如果一个文件中的一个语句发生错误 将会使整个网站的PHP程序都无法运行 所以使用起来也及其小心   其实 对包含文件稍做处理 即可以使包含文件只在需要时进行解析 下面的代码使abc inc文件只在程序需要时才作解析   if ( defined( __LIBA_INC) ) return;   define( __LIBA_INC );   /*   * 代码   */   ?>    使用面向对象的编程方法   PHP也是一种面向对象的语言 面向对象的编程方法是优秀的程序员们非常推崇的一种软件设计方法 在PHP编程中可以充分发挥面向对象语言的优势 对编程中的对象进行封装 在前面的代码中 我们使用了面向对象的方法 例如在管理数据库时 我们将query()函数封装进数据库类中 这极大地方便了代码的管理 增加了程序的可读性   三 追求程序速度 而不是编程的速度   在网站建设中 程序运行速度和网页下载速度都是关系成败的重要因素 作为一名Web程序员 应该更加注意代码的运行速度 下面介绍的几种方法都在不同程度上提高了代码的运行速度    使用内嵌的HTML代码 而不是PHP的echo语句   因为PHP是一门嵌入式Web编程语言 可以将HTML代码和PHP代码相互嵌入 但是很多程序员担心在HTML代码中过多的使用 嵌入PHP代码会多次调用PHP解释器 从而降低了PHP代码的运行速度 所以宁愿使用PHP的echo语句来输出HTML代码 而不直接使用HTML代码 但事实却恰恰相反 每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码 所以 只在需要时才嵌入PHP代码 而大多数的时候直接使用HTML代码输入结果 不但不会降低程序的运行速度 而且因为减少了对echo语句的解析 往往可以提高代码的运行速度   下面的一段代码证明了我们的结论 在这段代码中 我们使用了前面介绍的时间测试函数

  使用str-replace而不是ereg-replace 习惯使用Perl进行编程的程序员更加愿意使用ereg_replace完成字符串替换工作 因为在PHP中ereg_replace的用法和Perl中模式匹配的用法相近 但是 下面的这段代码证明 使用str_replace 代替 ereg_replace将可以大大提高代码的运行速度

  测试str_replace和ereg_replace的运行速度

  //这段代码测试str_replace的运行速度

  emphasis; ?>

  for ($i= ; $i< ; $i++)       str_replace(i> b> $string)    ;      ?>

  //这段代码测试ereg_replace的运行速度

  for ($i= ; $i< ; $i++)       ereg_replace(<([/]*)i> <b> $string) ;      ?>

  //打印结果

  结论

  使用str_replace的时间 -

cha138/Article/program/PHP/201311/21424

相关参考

知识大全 Php高手带路--问题汇总解答(一)

Php高手带路--问题汇总解答(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  :为什么我得

知识大全 Php高手带路--问题汇总解答(二)

Php高手带路--问题汇总解答(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  :为什么我升

知识大全 求高手教刷手机系统

求高手教刷手机系统参考资料。:bbs.angeeks./forum.php?mod=viewthread&tid=2584933请教高手如何刷手机系统自己刷机升级步骤如下:1.直接在网上下载新

知识大全 是沉默是金好,还是口无遮言好

是沉默是金好,还是口无遮言好其实,你看看那些大人物,有哪个口无遮掩,在你没有实力之前,沉默是金志者无言,沉默是金将心比心,路遥知马力日久见人心;不需解释,清者自清,不做亏心事不怕鬼叫门,想开些,这社会

知识大全 钯金是金么

钯金是金么?跟黄金有什么关系?钯金,铂族的一员,元素符号Pd,外观与铂金相似,呈银白色金属光泽,色泽鲜明。比重12,轻于铂金,延展性强。熔点为1555℃,硬度4-4.5,比铂金稍硬。化学性质较稳定,不

平和是金

平和,既是一种优良的品性,更是一种处世智慧。性格平和的人,一切都看得开,他们总是心无旁骛地专注于自己的事业,即使遇到挫折和不幸,也能一如既往地执著向前。法国植物学家迪亚,是一位贵族,法国大革命时,已7

什么是金叉、死叉、多头排列、空头排列?

1、上升行情初期,短期移动平均线从下向上突破中长期移动平均线,形成的交叉叫黄金交叉。  预示股价将上涨:黄色的5日均线上穿紫色的10日均线形成的交叉;10日均线上穿绿色的30日均线形成的交叉均为黄金交

莫道农家无宝玉 遍地黄花皆是金

黄花,又名金针菜、忘忧草、安神菜等等,而其最古老的名称则叫萱草。同一种植物竟然有这么多名称,这与它栽培的历史悠久和地域广阔密切相关。亦观亦食乐而忘忧黄花为著名的观赏和药食两用花卉植物。绿油油的叶子托着

养生大忌:懒惰与过于清闲

凡重视养生保健者,既不宜有懒惰心理,又不可过于清闲,,懒惰与过于清闲,非但妨碍正常的工作、学习和生活,而且还会加速人的衰老过程,是极其不利于人体身心健康的。德国著名医生戈费良曾经指出:“世界上没有一个

知识大全 别人说我懒,怎么解决懒惰,其实我也感觉自己很懒

别人说我懒,怎么解决懒惰,其实我也感觉自己很懒先找点感你兴趣的事做,然后就能享受成就感了。每天自己很懒惰怎么解决制定一个作息时间表,并且严格执行我很懒惰,怎样控制自己不要太懒惰。首先要对自己有信心,懒