ホームページ php教程 php手册 PHP の例は、PHP コードを記述するための 5 つの良い習慣を示しています

PHP の例は、PHP コードを記述するための 5 つの良い習慣を示しています

Jun 21, 2016 am 08:56 AM
gt messages quot the

PHP プログラミングの 5 つの良い習慣

優秀なプログラマーと優秀な人材の違いは何なのかと尋ねる人もいますが、おそらく 10 ~ 20 種類あります。ダニエルはプログラミングの習慣があり、豊富な経験があるため、非常に効率的です。コードに悪いプログラミング習慣が現れると、コードの効率が低下します。この記事では、より優れたプログラマーになれるいくつかの良いプログラミング習慣について説明します。

これらの習慣により、コードを効率的に実行しながら保守性を向上させることができます。コードを作成するとき、ほとんどの時間はメンテナンスに費やされる可能性があります。プログラムのメンテナンスには非常に費用がかかります。モジュール設計などの適切なプログラミング習慣を身につけると、コードがより読みやすくなり、保守が容易になります。

コードの問題は、悪いプログラミング習慣を伴うことが多く、後者はコードの修正を困難にし、新たな欠陥が現れる可能性があります。これらの落とし穴を避けるのに役立つ 5 つの良いプログラミング習慣を次に示します。

  1. わかりやすい命名規則を使用してください。
  2. より簡潔で短いコードを使用してください。
  3. コードをコメント化します。
  4. 例外処理を記述します。
  5. 絶対にコピー&ペーストしないでください (Corn: 私もこれに深く同意します)

次の章では、これらの習慣について説明します。

適切な名前を付けることは、コードを理解して理解するのを容易にするため、適切な名前を付けることが最も重要なプログラミング習慣です。コードの読みやすさによって、コードの保守性が決まります。コードにコメントを書かなくても、可読であれば修正が容易になります。コードを本のようなものにするために、演習の最初から適切な名前を使用する必要があります。

例 1 には短すぎる変数名が含まれています。このように記述されたコードを理解するのは非常に難しく、関数名はこのメソッドが何を行うのかを明確に説明していません。関数名は関数の機能を示すものであり、他の目的で使用すると誤解を招く恐れがあります。

<?<font color="#335533">php</font><br/><br/>function getNBDay($d)<br/>{<br/>    switch($d) {<br/>        case 5:<br/>        case 6:<br/>        case 7:<br/>            return 1;<br/>        default:<br/>            return ($d + 1);<br/>    }<br/>}<br/><br/>$day = 5;<br/><br/>$nextDay = getNBDay($day);<br/><br/>echo ("Next day is: " . $nextDay . "\n");<br/><br/>?><br/>
ログイン後にコピー

例 2 は、適切な命名方法を使用したコードを示しています。関数の機能をより適切に反映するために、関数の名前が変更されました。変数の名前もわかりやすいように変更されます。ループ内の 1 つの $i だけが依然として短い変数名を使用しています。同意しない人もいますが、ループ内では短い変数名を使用できます。変数名は明らかにポインタとして機能するため、さらに良いことです。

<?<font color="#335533">php</font><br/><br/>define ('MONDAY', 1);<br/>define ('TUESDAY', 2);<br/>define ('WEDNESDAY', 3);<br/>define ('THURSDAY', 4);<br/>define ('FRIDAY', 5);<br/>define ('SATURDAY', 6);<br/>define ('SUNDAY', 7);<br/><br/>/*<br/> *<br/> * @param $dayOfWeek<br/> * @return int Day of week, with 1 being Monday and so on.<br/> */<br/>function findNextBusinessDay($dayOfWeek)<br/>{<br/>    $nextBusinessDay = $dayOfWeek;<br/><br/>    switch($dayOfWeek) {<br/>        case FRIDAY:<br/>        case SATURDAY:<br/>        case SUNDAY:<br/>            $nextBusinessDay = MONDAY;<br/>            break;<br/>        default:<br/>            $nextBusinessDay += 1;<br/>            break;<br/>    }<br/><br/>    return $nextBusinessDay;<br/>}<br/><br/>$day = FRIDAY;<br/><br/>$nextBusDay = findNextBusinessDay($day);<br/><br/>echo ("Next day is:" . $nextBusDay . "\n");<br/><br/>?><br/>
ログイン後にコピー

関数内の長い条件を分離し、条件を説明しやすくするために関数に名前を付けることをお勧めします。 (コーン: この文の意味は何ですか? 5555) この手法を使用すると、コードが読みやすく拡張しやすくなり、抽象的に再利用できるようになります。これにより、条件が変わった場合でも関数を更新することが容易になります。メソッドにはよく知られた名前が付けられているため、コードが本来の意味を失ったり、理解しにくくなったりすることはありません。

コードの使用量を減らします

コードを書いて問題を解決するのは簡単です。進行中の問題を解決するとき、何度も書いて書き続けると、その方法はどんどん長くなっていきます。戻ってより少ないコードでリファクタリングを行う限り、時間が経っても問題はありません。

リファクタリングは良いアイデアですが、最初はより短く簡潔なコードを書く習慣を身につける必要があります。 1 つのウィンドウで表示できる (ページをめくる必要がない) 短い機能の方が理解しやすいです。 関数にウィンドウがある場合、コード全体を上から下まで素早く見ることができないため、理解するのが難しくなります。

メソッドを構築するときは、メソッドに 1 つのことだけを実行させる習慣も身に付ける必要があります。コードを記述するときは、次の要素に常に注意を払う必要があります。まず、1 つのことだけを行う関数は再利用が簡単です。第二に、このような機能テストはより便利です。第三に、このような関数は読みやすく理解しやすく、できるだけ単純にすることで必要に応じて変更できます。

悪い習慣: 関数が長すぎます (多くの場合)

例 3 は、長すぎる関数の実行です。何が起こるかわかりません。あまりにも多くのことを行うので、統合はできません。理解するのが難しくなり、デバッグやテストも難しくなります。ファイルを反復処理してリストを作成し、オブジェクトに値を割り当て、いくつかの計算を行い、...耕したり、水を与えたり、さらにはそれ以上のことを行います。 (^_^)

例 3. 悪い習慣: 関数が長すぎます

<?<font color="#335533">php</font><br/><br/>function writeRssFeed($user)<br/>{<br/>    // Get the DB connection information<br/><br/><br/>    // look up the user's preferences...<br/>    $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')<br/>        OR die(mysql_error());<br/><br/>    // Query<br/>    $perfsQuery = sprintf("SELECT max_stories FROM user_perfs WHERE user= '%s'",<br/>            mysql_real_escape_string($user));<br/><br/>    $result = mysql_query($query, $link);<br/><br/>    $max_stories = 25; // default it to 25;<br/><br/>    if ($row = mysql_fetch_assoc($result)) {<br/>        $max_stories = $row['max_stories'];<br/>    }<br/><br/>    // go get my data<br/>    $perfsQuery = sprintf("SELECT * FROM stories WHERE post_date = '%s'",<br/>            mysql_real_escape_string());<br/><br/>    $result = mysql_query($query, $link); <br/><br/><br/>    $feed = "<rss version=\"2.0\">" .<br/>        "<channel>" .<br/>        "<title>My Great Feed</title>" .<br/>        "<link>http://www.example.com/feed.xml</link>" .<br/>        "<description>The best feed in the world</description>" .<br/>        "<language>en-us</language>" .<br/>        "<pubDate>Tue, 20 Oct 2008 10:00:00 GMT</pubDate>" .<br/>        "<lastBuildDate>Tue, 20 Oct 2008 10:00:00 GMT</lastBuildDate>" .<br/>        "<docs>http://www.example.com/rss</docs>" .<br/>        "<generator>MyFeed Generator</generator>" .<br/>        "<managingEditor>editor@example.com</managingEditor>" .<br/>        "<webMaster>webmaster@example.com</webMaster>" .<br/>        "<ttl>5</ttl>";<br/><br/>        // build the feed...<br/>        while ($row = mysql_fetch_assoc($result)) {<br/>            $title = $row['title'];<br/>            $link = $row['link'];<br/>            $description = $row['description'];<br/>            $date = $row['date'];<br/>            $guid = $row['guid'];<br/><br/>            $feed .= "<item>";<br/>            $feed .= "<title>" . $title . "</title>";<br/>            $feed .= "<link>" . $link . "</link>";<br/>            $feed .= "<description> " . $description . "</description>";<br/>            $feed .= "<pubDate>" . $date . "</pubDate>";<br/>            $feed .= "<guid>" . $guid . "</guid>";<br/>            $feed .= "</item>";<br/>        }<br/><br/>        $feed .= "</rss";<br/><br/>        // write the feed out to the server...<br/>        echo($feed);<br/><br/>}<br/><br/>?><br/>
ログイン後にコピー

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

好习惯:可管理,集成化的函数

<?<font color="#335533">php</font><br/><br/>function createRssHeader()<br/>{<br/>    return "<rss version=\"2.0\">" .<br/>        "<channel>" .<br/>        "<title>My Great Feed</title>" .<br/>        "<link>http://www.example.com/feed.xml</link>" .<br/>        "<description>The best feed in the world</description>" .<br/>        "<language>en-us</language>" .<br/>        "<pubDate>Tue, 20 Oct 2008 10:00:00 GMT</pubDate>" .<br/>        "<lastBuildDate>Tue, 20 Oct 2008 10:00:00 GMT</lastBuildDate>" .<br/>        "<docs>http://www.example.com/rss</docs>" .<br/>        "<generator>MyFeed Generator</generator>" .<br/>        "<managingEditor>editor@example.com</managingEditor>" .<br/>        "<webMaster>webmaster@example.com</webMaster>" .<br/>        "<ttl>5</ttl>";<br/>}<br/><br/>function createRssFooter()<br/>{<br/>    return "</channel></rss>";<br/>}<br/><br/>function createRssItem($title, $link, $desc, $date, $guid) <br/>{<br/>    $item .= "<item>";<br/>    $item .= "<title>" . $title . "</title>";<br/>    $item .= "<link>" . $link . "</link>";<br/>    $item .= "<description> " . $description . "</description>";<br/>    $item .= "<pubDate>" . $date . "</pubDate>";<br/>    $item .= "<guid>" . $guid . "</guid>";<br/>    $item .= "</item>";<br/>    return $item;<br/>}<br/><br/>function getUserMaxStories($db_link, $default)<br/>{<br/>    $perfsQuery = sprintf("SELECT max_stories FROM user_perfs WHERE user= '%s'",<br/>            mysql_real_escape_string($user));<br/><br/>    $result = mysql_query($perfsQuery, $db_link);<br/><br/>    $max_stories = $default;<br/><br/>    if ($row = mysql_fetch_assoc($result)) {<br/>        $max_stories = $row['max_stories'];<br/>    } <br/><br/>    return $max_stories;<br/>}<br/><br/>function writeRssFeed($user)<br/>{<br/>    // Get the DB connection information<br/>    $settings = parse_ini_file("rss_server.ini");<br/><br/>    // look up the user's preferences...<br/>    $link = mysql_connect($settings['db_host'], $settings['user'], <br/>        $settings['password']) OR die(mysql_error());<br/><br/>    $max_stories = getUserMaxStories($link, 25);<br/><br/>    // go get my data<br/>    $newsQuery = sprintf("SELECT * FROM stories WHERE post_date = '%s'",<br/>            mysql_real_escape_string(time()));<br/><br/>    $result = mysql_query($newsQuery, $link); <br/><br/>    $feed = createRssHeader();<br/><br/>    $i = 0;<br/>    // build the feed...<br/>    while ($row = mysql_fetch_assoc($result)) {<br/>        if ($i < $max_stories) {<br/>            $title = $row['title'];<br/>            $link = $row['link'];<br/>            $description = $row['description'];<br/>            $date = $row['date'];<br/>            $guid = $row['guid'];<br/><br/>            $feed .= createRssItem($title, $link, $description, $date, $guid);<br/><br/>            $i++;<br/>        } else { <br/>            break;<br/>        }<br/>    }<br/><br/>    mysql_close($link);<br/><br/>    $feed .= createRssFooter();<br/><br/>    // write the feed out to the server...<br/>    echo($feed);<br/>}<br/>?><br/>
ログイン後にコピー

把长函数分割会导致效率降低,所以要注意,这个好习惯不要使用过度。这样做可能也会引起阅读性差,跟原来人家是一个整体时没什么区别。

注释代码

注释你的代码有时就像你刚着手写代码一样困难。明确注释内容很棘手,因为他要写出代码要做什么。注释变量是一个好主意。在函数头部注释可能不太明显时,就可以告诉阅读者函数要什么参数,有什么返回以及主要的意图。

通常大家会注释代码是做什么的,但这并不必要。如果代码让人困惑以至于你不得不写注释说它是做什么的,这就提示你应该重写它,使它更好懂。命名良好、更加短小、组织合理的代码习惯会让你的代码用不着注释就拥有很高的可读性。

坏习惯:压根没有或者叽叽歪歪的函数注释 (^_^)

例5的注释只给出了代码在做什么——它的通过循环的遍历、加了个数。但是丢了为什么这么做和要做什么。 这会让别人难以不影响原代码的情形下安全修改的做出修改。

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

<?<font color="#335533">php</font><br/><br/>class ResultMessage <br/>{<br/>    private $severity;<br/>    private $message;<br/><br/>    public function __construct($sev, $msg) <br/>    {<br/>        $this->severity = $sev;<br/>        $this->message = $msg;<br/>    }<br/><br/>    public function getSeverity()<br/>    {<br/>        return $this->severity;<br/>    }<br/><br/>    public function setSeverity($severity)<br/>    {<br/>        $this->severity = $severity;<br/>    }<br/><br/>    public function getMessage()<br/>    {<br/>        return $this->message;<br/>    }<br/><br/>    public function setMessage($msg)<br/>    {<br/>        $this->message = $msg;<br/>    }<br/>}<br/><br/>function cntMsgs($messages)<br/>{<br/>    $n = 0;<br/>    /* iterate through the messages... */<br/>    foreach($messages as $m) {<br/>        if ($m->getSeverity() == 'Error') {<br/>            $n++; // add one to the result;<br/>        }<br/>    }<br/>    return $n;<br/>}<br/><br/>$messages = array(new ResultMessage("Error", "This is an error!"),<br/>    new ResultMessage("Warning", "This is a warning!"),<br/>    new ResultMessage("Error", "This is another error!"));<br/><br/>$errs = cntMsgs($messages);<br/><br/>echo("There are " . $errs . " errors in the result.\n");<br/><br/>?><br/>
ログイン後にコピー

好习惯: 注释函数和类

例6里的注释标明了类和函数的意图。注释表明方法做了什么和为什么做,这会对将来了解代码的意图很有帮助。环境的变化会需要你进行代码修改,这就会让很容易的知道开始时你代码是做什么的。

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

<?<font color="#335533">php</font><br/>/**<br/> * The ResultMessage class holds a message that can be returned<br/> * as a result of a process. The message has a severity and<br/> * message.<br/> * <br/> * @author nagood<br/> *<br/> */<br/>class ResultMessage <br/>{<br/>    private $severity;<br/>    private $message;<br/><br/>    /**<br/>     * Constructor for the ResultMessage that allows you to assign<br/>     * severity and message.<br/>     * @param $sev See {@link getSeverity()}<br/>     * @param $msg<br/>     * @return unknown_type<br/>     */<br/>    public function __construct($sev, $msg) <br/>    {<br/>        $this->severity = $sev;<br/>        $this->message = $msg;<br/>    }<br/><br/>    /**<br/>     * Returns the severity of the message. Should be one<br/>     * "Information", "Warning", or "Error".<br/>     * @return string Message severity<br/>     */<br/>    public function getSeverity()<br/>    {<br/>        return $this->severity;<br/>    }<br/><br/>    /**<br/>     * Sets the severity of the message<br/>     * @param $severity<br/>     * @return void<br/>     */<br/>    public function setSeverity($severity)<br/>    {<br/>        $this->severity = $severity;<br/>    }<br/><br/>    public function getMessage()<br/>    {<br/>        return $this->message;<br/>    }<br/><br/>    public function setMessage($msg)<br/>    {<br/>        $this->message = $msg;<br/>    }<br/>}<br/><br/><br/>/*<br/> * Counts the messages with the given severity in the array<br/> * of messages.<br/> * <br/> * @param $messages An array of ResultMessage<br/> * @return int Count of messages with a severity of "Error"<br/> */<br/>function countErrors($messages)<br/>{<br/>    $matchingCount = 0;<br/>    foreach($messages as $m) {<br/>        if ($m->getSeverity() == "Error") {<br/>            $matchingCount++;<br/>        }<br/>    }<br/>    return $matchingCount;<br/>}<br/><br/>$messages = array(new ResultMessage("Error", "This is an error!"),<br/>    new ResultMessage("Warning", "This is a warning!"),<br/>    new ResultMessage("Error", "This is another error!"));<br/><br/>$errs = countErrors($messages);<br/><br/>echo("There are " . $errs . " errors in the result.\n");<br/><br/>?><br/>
ログイン後にコピー

异常处理

写健壮应用时经常会提到的异常处理,一般遵循着80/20原则: 80%的代码用于处理异常或者验证,20%的代码没什么实际的用途。原始的代码通常都是在乐观的环境下编写的。这意味着代码可以在数据正常、一切理解的基础环境中工作的很好。但是这种代码在其生命周期内是脆弱的。在极端的情形中,你得花更多的时间来未很可能永远不会发生的状况编写相应代码。

这个习惯就是要你处理全部的出错情况,而且如果要是不这么做,你的代码永远也完不成。

坏习惯:不处理任何异常

<?<font color="#335533">php</font><br/><br/>// Get the actual name of the <br/>function convertDayOfWeekToName($day)<br/>{<br/>    $dayNames = array(<br/>    "Sunday",<br/>    "Monday",<br/>    "Tuesday",<br/>    "Wednesday",<br/>    "Thursday",<br/>    "Friday",<br/>    "Saturday");<br/>    return $dayNames[$day];<br/>}<br/><br/>echo("The name of the 0 day is:  " . convertDayOfWeekToName(0) . "\n");<br/>echo("The name of the 10 day is:  " . convertDayOfWeekToName(10) . "\n");<br/>echo("The name of the 'orange' day is:  " . convertDayOfWeekToName('orange') . "\n");<br/><br/>?><br/>
ログイン後にコピー

好习惯: 防守型编程

例8表明处理并抛出异常是一件很有意义的事情。不只是额外的异常处理可以让代码健壮,但是这有助于提高代码的可读性。这种异常处理为原作者查看何时编写提供了一个很好的说明。

例8.好习惯:防守型编程

<?<font color="#335533">php</font><br/><br/>/**<br/> * This is the exception thrown if the day of the week is invalid.<br/> * @author nagood<br/> *<br/> */<br/>class InvalidDayOfWeekException extends Exception { }<br/><br/>class InvalidDayFormatException extends Exception { }<br/><br/>/**<br/> * Gets the name of the day given the day in the week. Will<br/> * return an error if the value supplied is out of range.<br/> * <br/> * @param $day<br/> * @return unknown_type<br/> */<br/>function convertDayOfWeekToName($day)<br/>{<br/>    if (! is_numeric($day)) {<br/>        throw new InvalidDayFormatException('The value \'' . $day . '\' is an ' .<br/>            'invalid format for a day of week.');<br/>    }<br/><br/>    if (($day > 6)  ($day < 0)) {<br/>        throw new InvalidDayOfWeekException('The day number \'' . $day . '\' is an ' .<br/>            'invalid day of the week. Expecting 0-6.');<br/>    }<br/><br/>    $dayNames = array(<br/>    "Sunday",<br/>    "Monday",<br/>    "Tuesday",<br/>    "Wednesday",<br/>    "Thursday",<br/>    "Friday",<br/>    "Saturday");<br/>    return $dayNames[$day];<br/>}<br/><br/>echo("The name of the 0 day is:  " . convertDayOfWeekToName(0) . "\n");<br/><br/>try {<br/>    echo("The name of the 10 day is:  " . convertDayOfWeekToName(10) . "\n");<br/>} catch (InvalidDayOfWeekException $e) {<br/>    echo ("Encountered error while trying to convert value:  " . $e->getMessage() . "\n");<br/>}<br/><br/>try {<br/>    echo("The name of the 'orange' day is:  " . convertDayOfWeekToName('orange') . "\n");<br/>} catch (InvalidDayFormatException $e) {<br/>    echo ("Encountered error while trying to convert value:  " . $e->getMessage() . "\n");<br/>}<br/><br/>?><br/>
ログイン後にコピー

通过检验参数的全法性——这有助于他人使用你需要正确参数的函数——你应该检验它们并抛出异常的大意:

  • 尽量抛出接近错误的异常.
  • 处理每个特殊的异常.


永远,永远不要复制粘贴

把代码复制到你的编辑里的能力是一把双刃剑。一方面,它避免了你参照一些示例后重新再打一遍时出现的错误;另一方面,它让书写相似代码太简单了。

你要避免在你的程序应用中复制粘贴代码。当你发现自己在这样做时,停下来并问自己可不可以把复制的部分重复使用。把相同的代码放在同一个地方可以让你以后修改时更加的轻松,因为要改变都在一起。

坏习惯:相似的代码块

例9表现了除了一些值所在位置之外很相近的几个方法。有些工具可以检验你的代码中复制粘贴的部分(去看看Resources)。

例9.相似的代码块

<?<font color="#335533">php</font><br/>/**<br/> * Counts the number of messages found in the array of <br/> * ResultMessage with the getSeverity() value of "Error"<br/> * <br/> * @param $messages An array of ResultMessage<br/> * @return unknown_type<br/> */<br/>function countErrors($messages)<br/>{<br/>    $matchingCount = 0;<br/>    foreach($messages as $m) {<br/>        if ($m->getSeverity() == "Error") {<br/>            $matchingCount++;<br/>        }<br/>    }<br/>    return $matchingCount;<br/>}<br/><br/>/**<br/> * Counts the number of messages found in the array of <br/> * ResultMessage with the getSeverity() value of "Warning"<br/> * <br/> * @param $messages An array of ResultMessage<br/> * @return unknown_type<br/> */<br/>function countWarnings($messages)<br/>{<br/>    $matchingCount = 0;<br/>    foreach($messages as $m) {<br/>        if ($m->getSeverity() == "Warning") {<br/>            $matchingCount++;<br/>        }<br/>    }<br/>    return $matchingCount;<br/>}<br/><br/>/**<br/> * Counts the number of messages found in the array of <br/> * ResultMessage with the getSeverity() value of "Information"<br/> * <br/> * @param $messages An array of ResultMessage<br/> * @return unknown_type<br/> */<br/>function countInformation($messages)<br/>{<br/>    $matchingCount = 0;<br/>    foreach($messages as $m) {<br/>        if ($m->getSeverity() == "Information") {<br/>            $matchingCount++;<br/>        }<br/>    }<br/>    return $matchingCount;<br/>}<br/><br/>$messages = array(new ResultMessage("Error", "This is an error!"),<br/>    new ResultMessage("Warning", "This is a warning!"),<br/>    new ResultMessage("Error", "This is another error!"));<br/><br/>$errs = countErrors($messages);<br/><br/>echo("There are " . $errs . " errors in the result.\n");<br/>?><br/>
ログイン後にコピー

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

例10展示了把要复制的代码入到一个方法中的代码修改。另一个修改的方法则把工作代理给了一个新的方法 。编写一个通用的方法要花一些时间来设计,当然这会让你停下来思考,而不是用复制粘贴的组合快捷键。但是这样做会在以后修改时省回第一次多花的时间。

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

<?<font color="#335533">php</font><br/>    /*<br/>     * Counts the messages with the given severity in the array<br/>     * of messages.<br/>     * <br/>     * @param $messages An array of ResultMessage<br/>     * @return int Count of messages matching $withSeverity<br/>     */<br/>    function countMessages($messages, $withSeverity)<br/>    {<br/>        $matchingCount = 0;<br/>        foreach($messages as $m) {<br/>            if ($m->getSeverity() == $withSeverity) {<br/>                $matchingCount++;<br/>            }<br/>        }<br/>        return $matchingCount;<br/>    }<br/><br/>    /**<br/>     * Counts the number of messages found in the array of <br/>     * ResultMessage with the getSeverity() value of "Error"<br/>     * <br/>     * @param $messages An array of ResultMessage<br/>     * @return unknown_type<br/>     */<br/>    function countErrors($messages)<br/>    {<br/>        return countMessages($messages, "Errors");<br/>    }<br/><br/>    /**<br/>     * Counts the number of messages found in the array of <br/>     * ResultMessage with the getSeverity() value of "Warning"<br/>     * <br/>     * @param $messages An array of ResultMessage<br/>     * @return unknown_type<br/>     */<br/>    function countWarnings($messages)<br/>    {<br/>        return countMessages($messages, "Warning");<br/>    }<br/><br/>    /**<br/>     * Counts the number of messages found in the array of <br/>     * ResultMessage with the getSeverity() value of "Warning"<br/>     * <br/>     * @param $messages An array of ResultMessage<br/>     * @return unknown_type<br/>     */<br/>    function countInformation($messages)<br/>    {<br/>        return countMessages($messages, "Information");<br/>    }<br/><br/>    $messages = array(new ResultMessage("Error", "This is an error!"),<br/>        new ResultMessage("Warning", "This is a warning!"),<br/>        new ResultMessage("Error", "This is another error!"));<br/><br/>    $errs = countErrors($messages);<br/><br/>    echo("There are " . $errs . " errors in the result.\n");<br/><br/>?><br/>
ログイン後にコピー

结论

如果当你开发PHP的时候养成了本文中提到的好习惯,你写的代码将会好读、好懂、好维护。编写可维护代码的方式将让你的代码可以高度排错,并告别低级错误。

使用良好命名并用短代码块来组强你的代码会让你的代码简单明了。注明你代码的目的会让它的主旨明确易于理解。异常处理让你的代码健壮。最后,摒弃复制粘贴的恶习让你的代码整洁。

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

玉米寄语:最后的这个复制粘贴的建议让我一身冷汗,想想其实有很多代码都是重复的工作,有时只是为了“快”,而把相似的代码又“复制”了一遍,虽然我没有使用ctrl+c\v 但是也是写了很多类似的代码,看来,review的事儿可以在世界和平的事儿之前考虑了。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

2か月後、人型ロボットWalker Sが服をたたむことができるようになった 2か月後、人型ロボットWalker Sが服をたたむことができるようになった Apr 03, 2024 am 08:01 AM

Machine Power Report 編集者: Wu Xin 国内版の人型ロボット + 大型模型チームは、衣服を折りたたむなどの複雑で柔軟な素材の操作タスクを初めて完了しました。 OpenAIのマルチモーダル大規模モデルを統合したFigure01の公開により、国内同業者の関連動向が注目を集めている。つい昨日、中国の「ヒューマノイドロボットのナンバーワン株」であるUBTECHは、Baidu Wenxinの大型モデルと深く統合されたヒューマノイドロボットWalkerSの最初のデモを公開し、いくつかの興味深い新機能を示した。 Baidu Wenxin の大規模モデル機能の恩恵を受けた WalkerS は次のようになります。 Figure01 と同様に、WalkerS は動き回るのではなく、机の後ろに立って一連のタスクを完了します。人間の命令に従って服をたたむことができる

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

iPhoneでApp Storeに接続できないエラーを修正する方法 iPhoneでApp Storeに接続できないエラーを修正する方法 Jul 29, 2023 am 08:22 AM

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

watch4proとGTのどちらが優れていますか? watch4proとGTのどちらが優れていますか? Sep 26, 2023 pm 02:45 PM

Watch4proとgtはそれぞれ特徴や適用シーンが異なりますが、総合的な機能、高性能、スタイリッシュな外観を重視し、価格は高くてもいいという方にはWatch 4 Proの方が適しているかもしれません。高度な機能要件はなく、バッテリー寿命と手頃な価格を重視する場合は、GT シリーズの方が適しているかもしれません。最終的な選択は、個人のニーズ、予算、好みに基づいて決定する必要がありますが、購入する前に自分のニーズを慎重に検討し、さまざまな製品のレビューや比較を参照して、より情報に基づいた選択を行うことをお勧めします。

THE はどの通貨ですか? THE コインは投資する価値がありますか? THE はどの通貨ですか? THE コインは投資する価値がありますか? Feb 21, 2024 pm 03:49 PM

THE とは何ですか? THE (Tokenized Healthcare Ecosystem) は、ブロックチェーン技術を使用してヘルスケア業界のイノベーションと改革に焦点を当てたデジタル通貨です。 THE コインの使命は、ブロックチェーン技術を使用して医療業界の効率と透明性を向上させ、患者、医療スタッフ、製薬会社、医療機関を含むすべての関係者間のより効率的な協力を促進することです。 THE Coin の価値と特徴 まず第一に、THE Coin はデジタル通貨として、分散化、高セキュリティ、透明性のある取引などのブロックチェーンの利点を備えており、参加者はこのシステムを信頼して利用することができます。第二に、THE コインの独自性は、ブロックチェーン技術を使用して従来の医療システムを変革し、改善するために医療および健康産業に焦点を当てていることです。

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 Mar 21, 2024 pm 10:31 PM

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 バッテリー寿命の延長はモバイル デバイス エクスペリエンスの鍵であり、iPad がその良い例です。 iPad のバッテリーの消耗が早すぎると感じても、心配しないでください。iPadOS 17.4 には、デバイスの実行時間を大幅に延長できるトリックや微調整が多数あります。この詳細なガイドの目的は、情報を提供するだけではなく、iPad の使用方法を変え、全体的なバッテリー管理を強化し、充電せずにデバイスをより長く使用できるようにすることです。ここで概説したプラクティスを採用することで、個人のニーズや使用パターンに合わせてテクノロジーをより効率的かつ意識的に使用するための一歩を踏み出すことができます。主要なエネルギー消費者を特定する

See all articles