`
xubaoguo
  • 浏览: 79362 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

5 个 PHP 编程的好习惯

阅读更多
原文:http://phpe.net/2010/08/php-coding-5goodhabits/
有些人问,优秀程序员和大牛有什么区别,大概有10到20种吧。因为大牛有很好的编程习惯和丰富的经验,所以他们非常的高效。如果不好的编程习惯出现在你的代码里,你的代码效率就会降低。本文阐述一些好的编程习惯,他们可以让你成为更好的程序员。

这些习惯能让你的代码在高效运行的同时提高可维护性。你写代码的时候,可能大部分时间都浪费在维护上了,程序的维护代价很高。培养良好的编程习惯,如模块化设计,可以让你的代码可读性更好,从而容易维护。

代码中的问题往往伴随着不良的编程习惯,而且后者会导致代码不好修改并可能出现新的缺陷。下面有五个好的编程习惯,将帮你避免这些陷阱:

   1. 使用友好的命名方式。
   2. 使用更精悍短小的代码。
   3. 注释你的代码。
   4. 编写异常处理。
   5. 永远,永远不要复制粘贴.(玉米:我深深的同意这一点)

下面的章节将解释这些习惯。
使用友好的命名方式

良好的命名方式是最重要的编程习惯,因为好的命名会让代码易懂,好懂。代码的可读性决定它的可维护性。即使你在代码没有写注释,如果它可读性好的话,它也修改起来也会简单。你应该在练习开时就使用良好的命名方式,让你的代码像一本书一样。

例1 包含一个过短的变量名,写出这样的代码非常不好弄懂,而且函数名也没有清晰的描述出这个方法是做什么的。函数名表示了函数的功能,如果它却是做别的用途的,那就会误导别人。

Listing 1. Bad: Ambiguous or meaningless names

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

	

<?php
function getNBDay($d)
{
    switch($d) {
        case 5:
        case 6:
        case 7:
            return 1;
        default:
            return ($d + 1);
    }
}
 
$day = 5;
 
$nextDay = getNBDay($day);
 
echo ("Next day is: " . $nextDay . "n");
?>

例2 则给出了使用良好命名方式的代码。重新命名函数是为了更好的反映它们的功能。变量也重新命名为描述性的。只有一个在循环中的$i还使用短的变量名。尽管有些人不同意,短变量名在循环中是请允许的——甚至更好些,因为它们清晰的起到了指针的功能。

Listing 2. Good: Reflective yet concise names

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

	

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

我鼓励你在函数中分隔长的条件给函数命名,以便于描述这个条件。(玉米:这句话啥意思?5555)这个技巧会让你的代码容易阅读和扩展,因此它可以被抽象复用。如果条件发生了改变,这样也会很容易更新函数 .由于方法有一个见名知义的名字,化码就不会失去它本来的意思或者变得难以理解。
使用更少的代码

编写代码、解决问题是一种容易的事情。当你解决一个正在发生的问题,编呀编,写呀写,你的方法越来越长。只要你回头使用更少的代码来重构,就是过了很久也没什么问题。

重构是个好主意,但你应该养成第一次就写出更短小精悍代码的习惯。在一个窗口上(玉米:不用翻页)就能看全的短小函数更容易理解。 要是一个函数长出了窗口,就很难理解了,因为你不能快速的从头到脚的浏览整个代码。

当构思一个方法的时候,你还应该养成一个让它们只做一件事情的习惯。以下因素写代码时应常注意。第一,只做一件事情的函数更易于复用。第二,这样的函数测试更方便。第三,这样的函数好读易懂方便改——如果必要的话——让它们尽可能的简单吧。
坏习惯:过长的函数(很多时候)

例三是过长函数的表现。它不知道自己要做什么。它做太多的事情,所以没有集成化。它更难以理解,不好Debug和测试。它遍历文件建立列表,它给对象赋值,它做一些计算,……它耕田,它浇水,甚至做更多事情。(^_^)

例三. 坏习惯:过长函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

	

<?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 = "<rss version="2.0">" .
        "<channel>" .
        "<title>My Great Feed</title>" .
        "<link>http://www.example.com/feed.xml</link>" .
        "<description>The best feed in the world</description>" .
        "<language>en-us</language>" .
        "<pubDate>Tue, 20 Oct 2008 10:00:00 GMT</pubDate>" .
        "<lastBuildDate>Tue, 20 Oct 2008 10:00:00 GMT</lastBuildDate>" .
        "<docs>http://www.example.com/rss</docs>" .
        "<generator>MyFeed Generator</generator>" .
        "<managingEditor>editor@example.com</managingEditor>" .
        "<webMaster>webmaster@example.com</webMaster>" .
        "<ttl>5</ttl>";
 
        // 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 .= "<item>";
            $feed .= "<title>" . $title . "</title>";
            $feed .= "<link>" . $link . "</link>";
            $feed .= "<description> " . $description . "</description>";
            $feed .= "<pubDate>" . $date . "</pubDate>";
            $feed .= "<guid>" . $guid . "</guid>";
            $feed .= "</item>";
        }
 
        $feed .= "</rss";
 
        // write the feed out to the server...
        echo($feed);
 
}
 
?>

要是你再加更多东西到这个函数里,它会很快变得难以维护。
好习惯:可管理,集成化的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

	

<?php
 
function createRssHeader()
{
    return "<rss version="2.0">" .
        "<channel>" .
        "<title>My Great Feed</title>" .
        "<link>http://www.example.com/feed.xml</link>" .
        "<description>The best feed in the world</description>" .
        "<language>en-us</language>" .
        "<pubDate>Tue, 20 Oct 2008 10:00:00 GMT</pubDate>" .
        "<lastBuildDate>Tue, 20 Oct 2008 10:00:00 GMT</lastBuildDate>" .
        "<docs>http://www.example.com/rss</docs>" .
        "<generator>MyFeed Generator</generator>" .
        "<managingEditor>editor@example.com</managingEditor>" .
        "<webMaster>webmaster@example.com</webMaster>" .
        "<ttl>5</ttl>";
}
 
function createRssFooter()
{
    return "</channel></rss>";
}
 
function createRssItem($title, $link, $desc, $date, $guid) 
{
    $item .= "<item>";
    $item .= "<title>" . $title . "</title>";
    $item .= "<link>" . $link . "</link>";
    $item .= "<description> " . $description . "</description>";
    $item .= "<pubDate>" . $date . "</pubDate>";
    $item .= "<guid>" . $guid . "</guid>";
    $item .= "</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 :压根没胡或者叽叽歪歪的函数注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

	

<?php
 
class ResultMessage 
{
    private $severity;
    private $message;
 
    public function __construct($sev, $msg) 
    {
        $this->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.好习惯:注释函数和类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

	

<?php
/**
 * The ResultMessage class holds a message that can be returned
 * as a result of a process. The message has a severity and
 * message.
 * 
 * @author nagood
 *
 */
class ResultMessage 
{
    private $severity;
    private $message;
 
    /**
     * Constructor for the ResultMessage that allows you to assign
     * severity and message.
     * @param $sev See {@link getSeverity()}
     * @param $msg
     * @return unknown_type
     */
    public function __construct($sev, $msg) 
    {
        $this->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%的代码没什么实际的用途。原始的代码通常都是在乐观的环境下编写的。这意味着代码可以在数据正常、一切理解的基础环境中工作的很好。但是这种代码在其生命周期内是脆弱的。在极端的情形中,你得花更多的时间来未很可能永远不会发生的状况编写相应代码。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

	

<?php
 
// Get the actual name of the 
function convertDayOfWeekToName($day)
{
    $dayNames = array(
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday");
    return $dayNames[$day];
}
 
echo("The name of the 0 day is:  " . convertDayOfWeekToName(0) . "n");
echo("The name of the 10 day is:  " . convertDayOfWeekToName(10) . "n");
echo("The name of the 'orange' day is:  " . convertDayOfWeekToName('orange') . "n");
 
?>

好习惯: 防守型编程

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

	

<?php
 
/**
 * This is the exception thrown if the day of the week is invalid.
 * @author nagood
 *
 */
class InvalidDayOfWeekException extends Exception { }
 
class InvalidDayFormatException extends Exception { }
 
/**
 * Gets the name of the day given the day in the week. Will
 * return an error if the value supplied is out of range.
 * 
 * @param $day
 * @return unknown_type
 */
function convertDayOfWeekToName($day)
{
    if (! is_numeric($day)) {
        throw new InvalidDayFormatException('The value '' . $day . '' is an ' .
            'invalid format for a day of week.');
    }
 
    if (($day > 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.相似的代码块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

	

<?php
/**
 * 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)
{
    $matchingCount = 0;
    foreach($messages as $m) {
        if ($m->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.好习惯 :可利用的带参函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

	

<?php
    /*
     * Counts the messages with the given severity in the array
     * of messages.
     * 
     * @param $messages An array of ResultMessage
     * @return int Count of messages matching $withSeverity
     */
    function countMessages($messages, $withSeverity)
    {
        $matchingCount = 0;
        foreach($messages as $m) {
            if ($m->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 的时候养成了本文中提到的好习惯,你写的代码将会好读、好懂、好维护。编写可维护代码的方式将让你的代码可以高度排错,并告别低级错误。

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


 

分享到:
评论

相关推荐

    PHP面向对象编程的7个好习惯(1)

    ### PHP面向对象编程的7个好习惯解析 #### 保持谦虚:信息隐藏与封装的重要性 在面向对象编程中,“保持谦虚”意味着遵循信息隐藏的原则,即避免直接暴露类的内部状态或实现细节。这一习惯的核心是封装,通过封装...

    php程序员编程习惯

    下面,我们将深入探讨文章中提及的七个面向对象的编程习惯,以及它们为何对PHP开发者至关重要。 ### 1. 保持谦虚:信息隐藏与封装 “保持谦虚”这一习惯指的是避免在类实现或函数实现中过度暴露细节。信息隐藏,即...

    PHP 编程好习惯,值得学习

    ### PHP编程好习惯详解 #### 引言 在软件开发领域,尤其是PHP编程中,优秀的编程习惯对于提高代码质量和效率至关重要。本篇文章旨在探讨并详细解释五个有助于提升PHP程序员技能的关键编程习惯,帮助读者理解如何...

    PHP面向对象编程的7个好习惯

    ### PHP面向对象编程的7个好习惯 #### 1. 保持谦虚 — 封装与信息隐藏 在面向对象编程(OOP)中,“保持谦虚”是指避免直接暴露类的内部状态或行为,而是通过封装来保护这些内部细节。这种做法的核心在于信息隐藏。 ...

    php编程,php中文手册

    PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发,...无论是初学者还是经验丰富的开发者,都应该养成经常查阅手册的好习惯,以便于不断提升自己的技能水平。

    PHP时尚编程百例 提供基础、思路、步骤等

    在PHP编程领域,掌握基础并理解各种编程思路与步骤至关重要。"PHP时尚编程百例"是一份旨在帮助初学者和进阶者提升PHP编程技能的资源。这份资料可能包含了多种类型的PHP编程实例,覆盖了从基础操作到复杂应用的各种...

    PHP中的安全编程习惯.pdf

    PHP中的安全编程习惯 本文档讨论了PHP中的安全编程习惯,介绍了 PHP 中的一些安全隐患和可能的攻击方式,以及如何避免和防范这些问题。通过分析 PHP 中的文件操作函数、动态文件和路径名称的处理、HTTP 请求和会话...

    第一个PHP的面向对象编程

    下面是本人根据servlet的编程模式,来书写一个PHP版本servlet式的请求响应模式。 从Html文档中请求一个书写一个classes/BaseDAO.PHP文档,然后在该文档中书写一个BaseDAO类,根据浏览器的POST请求,在该类有一个...

    PHP编程百例,welcome

    在压缩包中的"PHP编程一百例"文件列表,我们可以预期这是一个包含100个不同PHP编程示例的集合,每个例子可能涵盖不同的主题,比如变量声明、数据类型、流程控制(如if-else,switch-case)、函数的使用、数组操作、...

    在PHP中养成7个面向对象的好习惯

    以下是在PHP中养成七个面向对象好习惯的具体解释: 1. **保持谦虚**:这个习惯指的是避免在类中直接暴露实现细节,即信息隐藏或封装。通过将类的属性设为私有(private),并通过公共访问方法(getter和setter)来...

    提高PHP编程效率的53个要点

    ### 提高PHP编程效率的53个要点 在PHP开发过程中,提高编程效率不仅可以帮助开发者更快地完成项目,还能在一定程度上提升代码质量与可维护性。以下将详细阐述这53个要点,并针对每个要点提供实用建议。 #### 1. ...

    PHP编程规范,比较全面的php规范

    【PHP编程规范】是指导PHP开发者编写代码时应遵循的一系列规则和最佳实践,旨在提高代码的可读性、可维护性和团队协作效率。本文档主要涵盖了标准的重要性、优缺点、实施策略、命名规则等方面。 1. **标准化的重要*...

    PHP编程规范.pdf

    【PHP编程规范】是指导PHP开发人员遵循的一套准则,旨在提高代码的可读性、可维护性和团队协作效率。规范的重要性在于它提供了一个统一的标准,...在团队中推广和实施PHP编程规范,可以促进更好的代码质量和团队协作。

    我眼中良好的编程习惯1

    良好的编程习惯是编程者的基本素养,它不仅有助于个人代码质量的提升,还能让团队协作更加顺畅。以下是我根据标题和描述提炼出的一些关键点: 1. **宏定义的管理**:宏定义是预处理器指令,用于在编译时替换文本。...

    一个编程高手写给新手的话

    这篇内容是一位编程高手给新手的建议,旨在引导新手们更好地成长。以下是对这些知识点的详细阐述: 1. **主动学习与思考**:新手不应依赖他人的帮助而忽视自我探索。在遇到问题时,应尝试自己解决,分析问题的根源...

    PHP编程一定要改掉的5个不良习惯

    这5个PHP编程中的不良习惯,一定要改掉 PHP世界上最好的语言! 测试循环前数组是否为空? $items = []; // ... if (count($items) &gt; 0) { foreach ($items as $item) { // process on $item ... }} foreach循环...

    新手必看 php编程规范

    PHP编程规范对于初学者来说是至关重要的,它能够帮助编写出更易读、易维护的代码,提高团队协作效率。以下是一些主要的PHP编程规范要点: ...对于新手来说,这是一套很好的起点,能够帮助他们养成良好的编程习惯。

    phpf2f(php4 to php5)用于将php4代码移植到php5语法中

    `phpf2f`工具可以帮助开发者快速定位并转换上述语法差异,但它并不能处理所有情况,因为有些PHP4的编程习惯在PHP5中可能不再适用或者有更好的替代方案。因此,在使用`phpf2f`后,仍需要人工检查和修改代码,以确保...

Global site tag (gtag.js) - Google Analytics