最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]

 更新時間:2011年05月02日 14:00:56   作者:  
以下是一些PHP Coding Tips. 當(dāng)然, 這些Tips并不一定僅僅局限于PHP.大家有什么好的心得, 歡迎直接回復(fù)本文與更多的人分享.. 謝謝
最后更新: 2011/04/02

1. 使用list來實現(xiàn)一次獲取explode后的特定段值:
list( , $mid) = explode(';', $string);
2. 使用NULL === 來代替is_null:
is_null和 NULL === 完全是一樣的效果, 但是卻節(jié)省了一次函數(shù)調(diào)用.

3. 使用===盡量不用==:
PHP有倆組相等比較運算符===/!==和==/!=, ==/!=會有隱式類型轉(zhuǎn)換,而===/!==會嚴(yán)格比較倆個操作時是否類型相同并且值相等.
我們應(yīng)該盡量使用===而不是==, 除了因為轉(zhuǎn)換規(guī)則比較難記以外, 還有一點就是如果使用===, 對于日后的維護(hù)或者閱讀你代碼的人也會很舒服:”在這個時刻, 這一行語句, 這個變量就是這個類型的!”.

4. 少用/不用 continue:
continue是回到循環(huán)的頭部, 而循環(huán)結(jié)束本來就是回到循環(huán)的頭部, 所以通過適當(dāng)?shù)臉?gòu)造, 我們完全可以避免使用這條語句, 使得效率得到改善.

5. 警惕switch/in_array等的松比較(loose comparision):
switch和in_array都是采用松比較, 所以在要比較的變量之間類型不一樣的時候, 很容易出錯:

復(fù)制代碼 代碼如下:

switch ($name) {
case "laruence":
...
break;
case "eve":
...
break;
}

對于上面的switch, 如果$name是數(shù)字0, 那么它會滿足任何一條case. 同理在in_array中也是.
解決的辦法就是, 在switch之前, 把變量類型轉(zhuǎn)換成你所期望的類型.
復(fù)制代碼 代碼如下:

switch (strval($name)) {
case "laruence":
...
break;
case "eve":
...
break;
}


而, in_array提供了第三個可選的參數(shù), 通過這個參數(shù)可以改變默認(rèn)的比較方式.
6. switch不僅僅只用來判別變量:
比如, 對于如下的一段代碼:
復(fù)制代碼 代碼如下:

if($a) {
} else if ($b) {
} else if ($c || $d) {
}

可以簡單的改寫為:
復(fù)制代碼 代碼如下:

switch (TRUE) {
case $a:
break;
case $b:
break;
case $c:
case $d:
break;
}

是不是看起來更清晰呢?
7. 變量先定義后使用:
使用一個未定義的變量, 比使用一個定義好的變量要慢8倍以上!
可以相像, PHP引擎會首先按照正常的邏輯來獲取這個變量, 然而這個變量不存在, 所以PHP引擎需要拋出一個NOTICE, 并且進(jìn)入一段使用未定義變量時應(yīng)該走的邏輯, 然后返回一個新的變量.
另外, 閱讀代碼的角度講, 當(dāng)你使用一個未定義的變量時, 會讓閱讀你代碼的人困惑:”這個變量在那里初始化的, 和之前的代碼有關(guān)系么? 和include進(jìn)來的文件有關(guān)系么?”
最后, 從規(guī)范編程的角度來講, 你也需要這樣做.
8. 不用第三變量交換倆個變量的值:
list($a, $b) = array($b, $a),
但其實還是有匿名臨時變量的產(chǎn)生, 對于整數(shù)來說, 采用互逆的運算來做, 還是比較靠譜:
復(fù)制代碼 代碼如下:

$a = $a + $b;
$b = $a - $b;
$a = $a - $b;

不過, 還是用異或比較好, 因為+ – * /容易產(chǎn)生精度丟失或者溢出.
9. floor == 倆次非運算(此條由skiyo提供)
復(fù)制代碼 代碼如下:

echo ~~4.9;
echo floor(4.9);

用倆次非運算的速度基本上是floor的3倍, 不過有一點, 對于大數(shù)來說, 可能會發(fā)生溢出:
復(fù)制代碼 代碼如下:

echo ~~99999999999999.99; //276447231
echo floor(99999999999999.99); //99999999999999

10. do{}while(0)妙用(此條由Qianfeng提供)
我們知道do{}while(0)在c/c++中, 有很多妙用, 比如消除goto, 宏定義代碼塊.
所以, PHP中同理, 也可以用do{}while(0)來做一些巧妙的應(yīng)用
復(fù)制代碼 代碼如下:

do{
if(true) {
break;
}
if(true) {
break;
}
} while(false);
//好過
if(true) {
} else if(true) {
} else {
}

11. 盡量少用@錯誤抑制符
如下代碼:
復(fù)制代碼 代碼如下:

@func();

就相當(dāng)于(參見深入理解PHP原理之錯誤抑制與內(nèi)嵌HTML):
復(fù)制代碼 代碼如下:

$report = error_reporting(0);
func();
error_reporting($report);

另外錯誤抑制符號, 可能會造成一些問題, 參看(http://www.fzitv.net/article/27022.htm);
最后,錯誤抑制符在發(fā)生錯誤調(diào)試的時候也可能會帶來麻煩.
12. 盡量避免使用遞歸(此條來自lazyboy)
遞歸性能堪憂, 而大部分的遞歸都是尾遞歸, 都是可以消除的.
復(fù)制代碼 代碼如下:

function f($n) {
if ($n = 0) return 1;
return $n * f($n - 1);
}
//變?yōu)?
$result = 1;
for ($y = 1; $y < $n + 1; $y++ ) {
$result *= $y;
}

13. 使用$_SERVER['REQUEST_TIME']代替time()
time()會引來一次函數(shù)調(diào)用, 而如果對時間的精確值要求不高, 可以使用$_SERVER['REQUEST_TIME']代替, 快很多.
14. 避免在for判斷條件中做運算(此條來自留言的Anonymous)
如下的代碼:
for($i=0; $i<strlen($str); $i++) {
}
會導(dǎo)致每次循環(huán)都調(diào)用strlen, 改為
for ($i=0, $j=strlen($str); $i<$j; $i++) {
}
15. 盡量避免使用正則(此條來自pangyontao)
正則耗時, 盡量避免, 而采用直接的字符串處理函數(shù)代替, 如:
復(fù)制代碼 代碼如下:

if (preg_match("!^foo_!i", "FoO_")) { }
// 替換為:
if (!strncasecmp("foo_", "FoO_", 4)) { }
if (preg_match("![a8f9]!", "sometext")) { }
// 替換為:
if (strpbrk("a8f9", "sometext")) { }
if (preg_match("!string!i", "text")) {}
// 替換為:
if (stripos("text", "string") !== false) {}

等等.
16. 用大括號括起在雙引號和heredoc中的變量
如下的代碼:
echo "$name[2]";
PHP不知道程序員的意圖是$name . “[2]“還是$name[2],
所以建議, 都加上大括號:
復(fù)制代碼 代碼如下:

echo "{$name}[2]";
//或者
echo "${name}[2]";

17. 用FALSE表示錯誤, 用NULL表示不存在.
對于操作類的函數(shù), 失敗返回FALSE, 表示”操作失敗了”, 而對于查詢類的函數(shù), 如果找不到想要的值, 則應(yīng)該返回NULL, 表示”找不到”.

相關(guān)文章

  • php上傳圖片類及用法示例

    php上傳圖片類及用法示例

    這篇文章主要介紹了php上傳圖片類及用法,結(jié)合完整實例形式分析了php上傳圖片功能類及其具體使用方法,需要的朋友可以參考下
    2016-05-05
  • PHP中實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理分析

    PHP中實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理分析

    中文字符編碼研究系列第四期,PHP實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理分析,主要討論中文漢字轉(zhuǎn)換為十進(jìn)制和十六進(jìn)制的方法,并掌握轉(zhuǎn)換原理應(yīng)用于實際開發(fā)。本文以GBK編碼字符為例,討論GBK編碼的字符轉(zhuǎn)換原理
    2011-12-12
  • PHP中定義數(shù)組常量(array常量)的方法

    PHP中定義數(shù)組常量(array常量)的方法

    這篇文章主要介紹了PHP中定義數(shù)組常量(array常量)的方法,本文在類中使用了const關(guān)鍵字和eval()函數(shù)來實現(xiàn),需要的朋友可以參考下
    2014-11-11
  • ThinkPHP連接Oracle數(shù)據(jù)庫

    ThinkPHP連接Oracle數(shù)據(jù)庫

    本文給大家介紹的是如何使用thinkphp連接Oracle數(shù)據(jù)庫的方法和詳細(xì)步奏,并附上實例,非常的實用,有需要的小伙伴可以參考下
    2016-04-04
  • 使用NetBeans + Xdebug調(diào)試PHP程序的方法

    使用NetBeans + Xdebug調(diào)試PHP程序的方法

    前些天發(fā)現(xiàn)通過Notepad++的DBGP插件結(jié)合PHP的xdebug擴(kuò)展可以實現(xiàn)PHP文件調(diào)試,同時,介紹說包含了單步調(diào)試、監(jiān)視變量還有跨文件調(diào)試。
    2011-04-04
  • 修改Laravel5.3中的路由文件與路徑

    修改Laravel5.3中的路由文件與路徑

    本文先是回顧了Laravel5.2中路由的修改,然后給大家用實例代碼介紹了如何修改Laravel5.3中的路由,有需要的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • 一文帶你搞懂PHP單例模式

    一文帶你搞懂PHP單例模式

    單例就是單實例的意思,即在系統(tǒng)全局,一個類只創(chuàng)建一個對象,并且在系統(tǒng)全局都可以訪問這個對象而不用重新創(chuàng)建。本文將通過示例為大家詳細(xì)講解Java單例模式的使用,需要的可以參考一下
    2022-12-12
  • 微信公眾平臺之快遞查詢功能用法實例

    微信公眾平臺之快遞查詢功能用法實例

    這篇文章主要介紹了微信公眾平臺之快遞查詢功能用法,實例分析了微信公眾平臺實現(xiàn)快遞查詢的相關(guān)技巧與具體用法,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • php導(dǎo)入csv文件碰到亂碼問題的解決方法

    php導(dǎo)入csv文件碰到亂碼問題的解決方法

    這篇文章主要介紹了php導(dǎo)入csv文件碰到亂碼問題的解決方法,需要的朋友可以參考下
    2014-02-02
  • PHP的反射機(jī)制實例詳解

    PHP的反射機(jī)制實例詳解

    這篇文章主要介紹了PHP的反射機(jī)制,結(jié)合實例形式詳細(xì)分析了php反射機(jī)制的功能、原理、獲取屬性、注釋、方法相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03

最新評論

普宁市| 沂源县| 泽州县| 洪洞县| 蒙阴县| 屏山县| 图们市| 丹阳市| 盈江县| 建湖县| 永春县| 类乌齐县| 鄂托克前旗| 泰来县| 喀喇| 交口县| 甘孜县| 永定县| 柳江县| 文水县| 镇康县| 光山县| 开化县| 通州区| 越西县| 祁东县| 双鸭山市| 天气| 黄石市| 昌黎县| 巢湖市| 雷州市| 和硕县| 隆化县| 荣成市| 镇康县| 郯城县| 陆河县| 贞丰县| 通化县| 木兰县|