[精讚] [會員登入]
1480

[PHP] 2個程式的觀念

整理2個PHP的程式觀念,參考參考。

分享此文連結 //n.sfs.tw/12790

分享連結 [PHP] 2個程式的觀念@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 06:56:46 最後編修
2018-10-07 01:16:45 By 張○○
 

自動目錄

 

PHP的字串比對

很多初學者應該寫過這樣的程式碼吧:

$a ="abc123";
$b ="123def";

if( $a==$b) print "Same String"
else print "Different String";

執行結果

Different String

 

看起來「結果」似乎沒錯,但是這不是正確的寫法,甚至有時出來錯誤的結果(而且常會找不到錯誤原因)。

字串比對應該要用 strcmp或是 strncmp,這樣子 $a和 $b 才會用「字串」的身分進行比對。來看以下的範例:

$a =123;
$b ="123def";

if( $a==$b)print "{$a}=={$b}"; else print "{$a}!={$b}";
if( $a===$b)print "{$a}==={$b}"; else print "{$a}!=={$b}";
if(!strcmp($a,$b))print "{$a} eq {$b}";  else print "{$a} ne {$b}";

4、5、6行分別用不同的寫法來比對字串

執行結果

123==123def <==結果是相同
123!==123def
123 ne 123def

為什麼結果是相同的,因為如果用 '=='來判斷的話,字串 "123def" 會解析成數值 123。

好奇來執行10000次的比對,看看哪個方式比較快。

Use '==': 0.024129867553711
Use '===': 0.015527963638306
Use 'strcmp': 0.08548498153686

畫出時間比較發現,使用 === 竟然是最快的。

PHP中可用 '==='  代替 strcmp 更快速,因為 '===' 是會先比對變數型態。

重點是字串比對一定要用 strcmp 函式,不要使用 == 作邏輯比對

 

 

三元運算子不一定慢

我都以為三元運算子是最慢的,其實不一定,寫個程式來測試:

$s = microtime(1);
for ($i = 0; $i < 100000; $i++){
  $a=1;
  if($a==1)$a=2;
  else $a=3;
}
$e = microtime(1);
echo "IF Method: \$a={$a} ".($e - $s)."\n";

$s = microtime(1);
for ($i = 0; $i < 100000; $i++){
  $a=1;
  $a=($a==1)?2:3;
}
$e = microtime(1);
echo "Ternary operator Method: \$a={$a} ".($e - $s)."\n";

輸出結果

IF Method: $a=2 0.02797794342041
Ternary operator Method: $a=2 0.02560019493103

三元運算子耗用的時間略小於if的判斷方法,因此

適當的使用三元運算子,不但簡潔而且不見得比較慢。

 

相關文章

PHP程式經驗 #2 -- print和echo的差異

PHP程式經驗 #1 -- 靜態的物件比動態物件快


原文 2010-06-04 00:56:08

END

你可能感興趣的文章

[PHP] 判斷程式是從CLI、本地網路或是網際網路端執行的方法 PHP利用IP判斷程式是從CLI、本地網路或是網際網路端執行的方法

[PHP] 使用FTP PHP 上使用 FTP 的寫法

[Centos 6& 7] 安裝php-geoip php-geoip是PHP由domain、ip查詢城市國家資料非常強的函式

[PHP]解決ksort新增的SORT_NATURAL|SORT_FLAG_CASE方法 php>=5.4中ksort函數多了SORT_NATURAL 和 SORT_FLAG_CASE 旗標,對舊版的PHP中要怎麼辦?

[PHP8] 使用autoload autoload+ namespace +use 到了php7之後,namespace和use越來越重要,此篇整理autoload和namespace、use的結合使用。

[PHP] 判斷文字、數字、文字加數字的方法 幾個PHP數字和文字操作上的小眉角:判斷文字、數字、文字加數字的方法

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

SELinux 常用指令和檔案 在Redhat系列中,Centos5以後加入了selinux,他並沒有這麼可怕,不必每次看到Selinux ,就想把他

[Freebsd] 使用 ADSL 撥接上網 Freebsd上要使用 ADSL 撥接上網,該如何設定?

[Win7] 燒錄 iso 檔 在Windows7 中內建燒錄程式,可以直接把檔案拉到光碟機裡,再執行燒錄。

NETCRAFT發現你的網站及作業系統 NETCRAFT可以發現你的網站及作業系統

[AS3] 我做的唯一一個Flash As3遊戲UFO INVADSION [AS3] 我做的唯一一個Flash As3遊戲,是第一個也是最後一個,後來就沒再寫as3,不過as3還滿好玩的。