PHP实例阐明编写PHP代码的5个好习气-Php-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝33
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:256回复:0

  PHP实例阐明编写PHP代码的5个好习气

楼主#
更多 发布于:2016-05-19 16:14

有些人问,优异程序员和大牛有啥差异,大概有10到20种吧。由于大牛有极好的编程习气和丰厚的经历,所以他们十分的高效。假如欠好的编程习气呈现在你的代码里,你的代码功率就会下降。这篇文章论述一些好的编程习气,他们能够让你变成十分好的程序员。

5个PHP编程的好习气

有些人问,优异程序员和大牛有啥差异,大概有10到20种吧。由于大牛有极好的编程习气和丰厚的经历,所以他们十分的高效。假如欠好的编程习气呈现在你的代码里,你的代码功率就会下降。这篇文章论述一些好的编程习气,他们能够让你变成十分好的程序员。

这些习气能让你的代码在高效运转的一同进步可保护性。你写代码的时分,也许大多数时刻都糟蹋在保护上了,程序的保护价值很高。培育杰出的编程习气,如模块化规划,能够让你的代码可读性十分好,从而简略保护。

代码中的疑问一般伴随着不良的编程习气,并且后者会致使代码欠好修正并也许呈现新的缺点。下面有五个好的编程习气,将帮你防止这些圈套:

运用友爱的命名办法。

运用更精悍矮小的代码。

注释你的代码。

编写反常处理。

永久,永久不要仿制粘贴.(玉米:我深深的赞同这一点)

下面的章节将解说这些习气。

杰出的命名办法是最重要的编程习气,由于好的命名会让代码易懂,好懂。代码的可读性决议它的可保护性。即便你在代码没有写注释,假如它可读性好的话,它也修正起来也会简略。你应当在操练开时就运用杰出的命名办法,让你的代码像一本书一样。

例1包含一个过短的变量名,写出这么的代码十分欠好弄懂,并且函数名也没有明晰的描绘出这个办法是做啥的。函数名标明晰函数的功用,假如它却是做其他用途的,那就会误导别人。

例2则给出了运用杰出命名办法的代码。从头命名函数是为了十分好的反映它们的功用。变量也从头命名为描绘性的。只需一个在循环中的$i还运用短的变量名。虽然有些人不赞同,短变量名在循环中是请答应的——乃至十分好些,由于它们明晰的起到了指针的功用。

我鼓舞你在函数中分隔长的条件给函数命名,以便于描绘这个条件。(玉米:这句话啥意思?5555)这个技巧会让你的代码简略阅览和拓展,因此它能够被笼统复用。假如条件发作了改动,这么也会很简略更新函数

.由于办法有一个见名知义的姓名,化码就不会失掉它正本的意思或许变得难以了解。

运用更少的代码

编写代码、处理疑问是一种简略的作业。当你处理一个正在发作的疑问,编呀编,写呀写,你的办法越来越长。只需你回头运用更少的代码来重构,就是过了好久也没啥疑问。

重构是个好主意,但你应当养成榜首次就写出更矮小精悍代码的习气。在一个窗口上(玉米:不必翻页)就能看全的矮小函数更简略了解。

要是一个函数长出了窗口,就很难了解了,由于你不能迅速的从头到脚的阅览悉数代码。

当构思一个办法的时分,你还应当养成一个让它们只做一件作业的习气。以下要素写代码时应常留意。榜首,只做一件作业的函数更易于复用。第二,这么的函数测验更便利。第三,这么的函数好读易懂便利改——假如必要的话——让它们尽也许的简略吧。

坏习气:过长的函数(许多时分)

例三是过长函数的体现。它不知道自个要做啥。它做太多的作业,所以没有集成化。它更难以了解,欠好Debug和测验。它遍历文件树立列表,它给目标赋值,它做一些核算,……它耕田,它洒水,乃至做更多作业。(^_^)

例三. 坏习气:过长函数

<?php function

writeRssFeed($user){    // Get the DB connection information    // look up the

user's preferences...    $link = mysql_connect('mysql_host', 'mysql_user',

'mysql_password')        OR die(mysql_error());    // Query    $perfsQuery =

sprintf("SELECT max_stories FROM user_perfs WHERE user= '%s'",          

 mysql_real_escape_string($user));    $result = mysql_query($query, $link);  

 $max_stories = 25; // default it to 25;    if ($row =

mysql_fetch_assoc($result)) {        $max_stories = $row['max_stories'];    }  

 // go get my data    $perfsQuery = sprintf("SELECT * FROM stories WHERE

post_date = '%s'",            mysql_real_escape_string());    $result =

mysql_query($query, $link);     $feed = "" .        "" .        "" .      

 "http://www.example.com/feed.xml" .        "The best feed in the world" .      

 "en-us" .        "Tue, 20 Oct 2008 10:00:00 GMT" .        "Tue, 20 Oct 2008

10:00:00 GMT" .        "http://www.example.com/rss" .        "MyFeed Generator"

.        "editor@example.com" .        "webmaster@example.com" .        "5";    

   // build the feed...        while ($row = mysql_fetch_assoc($result)) {      

     $title = $row['title'];            $link = $row['link'];          

 $description = $row['description'];            $date = $row['date'];          

 $guid = $row['guid'];            $feed .= "";            $feed .= "";          

 $feed .= "" . $link . "";            $feed .= "" . $description . "";          

 $feed .= "" . $date . "";            $feed .= "" . $guid . "";            $feed

.= "";        }        $feed .= "

要是你再加更多东西到这个函数里,它会很快变得难以保护。

好习气:可办理,集成化的函数

<?php function

createRssHeader(){    return "" .        "" .        "" .      

 "http://www.example.com/feed.xml" .        "The best feed in the world" .      

 "en-us" .        "Tue, 20 Oct 2008 10:00:00 GMT" .        "Tue, 20 Oct 2008

10:00:00 GMT" .        "http://www.example.com/rss" .        "MyFeed Generator"

.        "editor@example.com" .        "webmaster@example.com" .      

 "5";}function createRssFooter(){    return "";}function createRssItem($title,

$link, $desc, $date, $guid) {    $item .= "";    $item .= "";    $item .= "" .

$link . "";    $item .= "" . $description . "";    $item .= "" . $date . "";  

 $item .= "" . $guid . "";    $item .= "";    return $item;}function

getUserMaxStories($db_link, $default){    $perfsQuery = sprintf("SELECT

max_stories FROM user_perfs WHERE user= '%s'",          

 mysql_real_escape_string($user));    $result = mysql_query($perfsQuery,

$db_link);    $max_stories = $default;    if ($row = mysql_fetch_assoc($result))

{        $max_stories = $row['max_stories'];    }     return

$max_stories;}function writeRssFeed($user){    // Get the DB connection

information    $settings = parse_ini_file("rss_server.ini");    // look up the

user's preferences...    $link = mysql_connect($settings['db_host'],

$settings['user'],         $settings['password']) OR die(mysql_error());  

 $max_stories = getUserMaxStories($link, 25);    // go get my data    $newsQuery

= sprintf("SELECT * FROM stories WHERE post_date = '%s'",          

 mysql_real_escape_string(time()));    $result = mysql_query($newsQuery, $link);

    $feed = createRssHeader();    $i = 0;    // build the feed...    while ($row

= mysql_fetch_assoc($result)) {        if ($i < $max_stories) {          

 $title = $row['title'];            $link = $row['link'];          

 $description = $row['description'];            $date = $row['date'];          

 $guid = $row['guid'];            $feed .= createRssItem($title, $link,

$description, $date, $guid);            $i++;        } else {             break;

       }    }    mysql_close($link);    $feed .= createRssFooter();    // write

the feed out to the server...    echo($feed);}?>

把长函数切割会致使功率下降,所以要留意,这个好习气不要运用过度。这么做也许也会引起阅览性差,跟本来人家是一个全体时没啥差异。

注释代码

注释你的代码有时就像你刚着手写代码一样艰难。清晰注释内容很扎手,由于他要写出代码要做啥。注释变量是一个好主意。在函数头部注释也许不太明显时,就能够通知阅览者函数要啥参数,有啥回来以及首要的意图。

一般我们会注释代码是做啥的,但这并不必要。假如代码让人迷惑以至于你不得不写注释说它是做啥的,这就提示你应当重写它,使它十分好懂。命名杰出、愈加矮小、安排合理的代码习气会让你的代码用不着注释就具有很高的可读性。

坏习气:压根没有或许叽叽歪歪的函数注释

(^_^)

例5的注释只给出了代码在做啥——它的经过循环的遍历、加了个数。可是丢了为啥这么做和要做啥。

这会让别人难以不影响原代码的景象下安全修正的做出修正。

例5 :压根没胡或许叽叽歪歪的函数注释

severity = $sev;      

 $this->message = $msg;    }    public function getSeverity()    {      

 return $this->severity;    }    public function setSeverity($severity)    {

       $this->severity = $severity;    }    public function getMessage()    {

       return $this->message;    }    public function setMessage($msg)    {  

     $this->message = $msg;    }}function cntMsgs($messages){    $n = 0;  

 /* iterate through the messages... */    foreach($messages as $m) {        if

($m->getSeverity() == 'Error') {            $n++; // add one to the result;  

     }    }    return $n;}$messages = array(new ResultMessage("Error", "This is

an error!"),    new ResultMessage("Warning", "This is a warning!"),    new

ResultMessage("Error", "This is another error!"));$errs =

cntMsgs($messages);echo("There are " . $errs . " errors in the

result.\n");?>

好习气: 注释函数和类

例6里的注释标明晰类和函数的意图。注释标明办法做了啥和为啥做,这会对将来了解代码的意图很有协助。环境的变化会需求你进行代码修正,这就会让很简略的知道开始时你代码是做啥的。

例6.好习气:注释函数和类

severity = $sev;      

 $this->message = $msg;    }    /**     * Returns the severity of the

message. Should be one     * "Information", "Warning", or "Error".     * @return

string Message severity     */    public function getSeverity()    {      

 return $this->severity;    }    /**     * Sets the severity of the message  

  * @param $severity     * @return void     */    public function

setSeverity($severity)    {        $this->severity = $severity;    }  

 public function getMessage()    {        return $this->message;    }  

 public function setMessage($msg)    {        $this->message = $msg;    }}/*

* Counts the messages with the given severity in the array * of messages. *  *

@param $messages An array of ResultMessage * @return int Count of messages with

a severity of "Error" */function countErrors($messages){    $matchingCount = 0;

   foreach($messages as $m) {        if ($m->getSeverity() == "Error") {    

       $matchingCount++;        }    }    return $matchingCount;}$messages =

array(new ResultMessage("Error", "This is an error!"),    new

ResultMessage("Warning", "This is a warning!"),    new ResultMessage("Error",

"This is another error!"));$errs = countErrors($messages);echo("There are " .

$errs . " errors in the result.\n");?>

反常处理

写强健运用时经常会说到的反常处理,一般遵循着80/20准则:

80%的代码用于处理反常或许验证,20%的代码没啥实践的用途。初始的代码一般都是在达观的环境下编写的。这意味着代码能够在数据正常、一切了解的基础环境中作业的极好。可是这种代码在其生命周期内是软弱的。在极点的景象中,你得花更多的时刻来未很也许永久不会发作的情况编写相应代码。

这个习气就是要你处理悉数的犯错情况,并且假如要是不这么做,你的代码永久也完不成。

坏习气:不处理任何反常

好习气: 防卫型编程

例8标明处理并抛出反常是一件很有意义的作业。不仅仅额定的反常处理能够让代码强健,可是这有助于进步代码的可读性。这种反常处理为原作者查看何时编写供给了一个极好的阐明。

例8.好习气:防卫型编程

6) || ($day < 0)) {      

 throw new InvalidDayOfWeekException('The day number \'' . $day . '\' is an ' .

           'invalid day of the week. Expecting 0-6.');    }    $dayNames =

array(    "Sunday",    "Monday",    "Tuesday",    "Wednesday",    "Thursday",  

 "Friday",    "Saturday");    return $dayNames[$day];}echo("The name of the 0

day is:  " . convertDayOfWeekToName(0) . "\n");try {    echo("The name of the 10

day is:  " . convertDayOfWeekToName(10) . "\n");} catch

(InvalidDayOfWeekException $e) {    echo ("Encountered error while trying to

convert value:  " . $e->getMessage() . "\n");}try {    echo("The name of the

'orange' day is:  " . convertDayOfWeekToName('orange') . "\n");} catch

(InvalidDayFormatException $e) {    echo ("Encountered error while trying to

convert value:  " . $e->getMessage() . "\n");}?>

经过查验参数的全法性——这有助于别人运用你需求正确参数的函数——你应当查验它们并抛出反常的粗心:

尽量抛出挨近过错的反常.

处理每个特殊的反常.

永久,永久不要仿制粘贴

把代码仿制到你的修正里的才能是一把双刃剑。一方面,它防止了你参照一些示例后从头再打一遍时呈现的过错;另一方面,它让书写相似代码太简略了。

你要防止在你的程序运用中仿制粘贴代码。当你发现自个在这么做时,停下来并问自个可不能够把仿制的有些重复运用。把一样的代码放在同一个当地能够让你今后修正时愈加的轻松,由于要改动都在一同。

坏习气:相似的代码块

例9体现了除了一些值所在位置以外很相近的几个办法。有些东西能够查验你的代码中仿制粘贴的有些(去看看Resources)。

例9.相似的代码块

getSeverity() == "Error") {    

       $matchingCount++;        }    }    return $matchingCount;}/** * Counts

the number of messages found in the array of  * ResultMessage with the

getSeverity() value of "Warning" *  * @param $messages An array of ResultMessage

* @return unknown_type */function countWarnings($messages){    $matchingCount =

0;    foreach($messages as $m) {        if ($m->getSeverity() == "Warning") {

           $matchingCount++;        }    }    return $matchingCount;}/** *

Counts the number of messages found in the array of  * ResultMessage with the

getSeverity() value of "Information" *  * @param $messages An array of

ResultMessage * @return unknown_type */function countInformation($messages){  

 $matchingCount = 0;    foreach($messages as $m) {        if

($m->getSeverity() == "Information") {            $matchingCount++;        }

   }    return $matchingCount;}$messages = array(new ResultMessage("Error",

"This is an error!"),    new ResultMessage("Warning", "This is a warning!"),  

 new ResultMessage("Error", "This is another error!"));$errs =

countErrors($messages);echo("There are " . $errs . " errors in the

result.\n");?>

好习气:可复用的带参函数

例10展现了把要仿制的代码入到一个办法中的代码修正。另一个修正的办规律把作业署理给了一个新的办法

。编写一个通用的办法要花一些时刻来规划,当然这会让你停下来考虑,而不是用仿制粘贴的组合快捷键。可是这么做会在今后修正时省回榜首次多花的时刻。

例10.好习气 :可利用的带参函数

getSeverity() == $withSeverity)

{                $matchingCount++;            }        }        return

$matchingCount;    }    /**     * Counts the number of messages found in the

array of      * ResultMessage with the getSeverity() value of "Error"     *    

 * @param $messages An array of ResultMessage     * @return unknown_type     */

   function countErrors($messages)    {        return countMessages($messages,

"Errors");    }    /**     * Counts the number of messages found in the array of

     * ResultMessage with the getSeverity() value of "Warning"     *      *

@param $messages An array of ResultMessage     * @return unknown_type     */  

 function countWarnings($messages)    {        return countMessages($messages,

"Warning");    }    /**     * Counts the number of messages found in the array

of      * ResultMessage with the getSeverity() value of "Warning"     *      *

@param $messages An array of ResultMessage     * @return unknown_type     */  

 function countInformation($messages)    {        return

countMessages($messages, "Information");    }    $messages = array(new

ResultMessage("Error", "This is an error!"),        new ResultMessage("Warning",

"This is a warning!"),        new ResultMessage("Error", "This is another

error!"));    $errs = countErrors($messages);    echo("There are " . $errs . "

errors in the result.\n");?>

定论

假如当你开发PHP的时分养成了这篇文章中说到的好习气,你写的代码将会好读、好懂、好保护。编写可保护代码的办法将让你的代码能够高度排错,并告别初级过错。

运用杰出命名并用短代码块来组强你的代码会让你的代码简略明晰。注明你代码的意图会让它的主旨清晰易于了解。反常处理让你的代码强健。最终,摒弃仿制粘贴的恶习让你的代码整洁。

-----------------------------------------------------

玉米寄语:最终的这个仿制粘贴的主张让我一身盗汗,想想其实有许多代码都是重复的作业,有时仅仅为了“快”,而把相似的代码又“仿制”了一遍,虽然我没有运用ctrl+c\v

可是也是写了许多相似的代码,看来,review的事儿能够在世界和平的事儿之前考虑了。

[font=Tahoma  ]

优质IT资源分享社区为你提供此文。

本站有大量优质php教程视频,资料等资源,包含php基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

php教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客