三元運算和if語句。
我先道歉,我最近才發現我用的wamp不是我說的那一版,我安裝wamp的時候沒刪老版的,而且安裝在了原目錄。現在發現新版的預設配置是如果變數未賦初值,就會報錯。雖然變數未賦初值改配置檔案就可以,這樣寫起來也方便,但據我的經驗,這樣做,好處比壞處少。
現在在下面的二段**中加入了這兩句,就不會報錯了。
isset($_post['user_id']) ? '' : $_post['user_id'] = '';
isset($_post['user_name']) ? '' : $_post['user_name'] = '';
下面的例子有sql
注入漏洞。另外,如果輸入內容中含有雙引號,也會破壞表單。
這個是三元運算的例子,注意下面的
html**中有
php**。
<?php
isset($_post['user_id']) or $_post['user_id'] = false;
isset($_post['user_name']) or $_post['user_name'] = false;
$sql_where = ($_post['user_id'] != '' ? " and b=''" : '') .
($_post['user_name'] != '' ? " and b='$'" : '');
?>
用if語句要麻煩一些。
<?php
$sql_where = '';
isset($_post['user_id']) or $_post['user_id'] = false;
isset($_post['user_name']) or $_post['user_name'] = false;
if ($_post['user_id'] != '')
'"; }
if ($_post['user_name'] != '')
'"; }
?>
但是,很多時候用if
或switch
語句更好, 還可以用陣列的鍵值代替(參見《**大全》這本書)。而用三元運算子很多時候會讓**不合規範, 不易理解。
(在php5.4之前,
三元運算子
相比if
語句,效率較低,
5.4之後就差不多了,詳見這篇部落格
)<?php
/* phpnet dot 20 dot dpnsubs at xoxy dot net (01-nov-2007 10:13) */
$a = 2;
echo ($a === 1 ? 'one' :
($a === 2 ? 'two' :
($a === 3 ? 'three' :
($a === 4 ? 'four' : 'other'))));
echo '';
//很像
lisp的if
語句/* ;lisp
(setq b 3)
(print (if (equal b 1)
"one"
(if (equal b 2)
"two"
(if (equal b 3)
"three")))) */
$b = 3;
if ($b === 1)
elseif ($b === 2)
else if ($b === 3)
echo '';
$c = 1;
switch ($c)
echo '';
/* ;lisp
(setq c 2)
(cond ((equal c 1) (print "one"))
((equal c 2) (print "two"))
((equal c 3) (print "three"))) */
$d = 3;
$e = '1';
$arr_num = array (
1 => 'one',
'2' => 'two',
'3' => 'three',
'11' => 'four',
'nil' );
echo $arr_num[$d] , '-' , $arr_num[$e] , '-' , $arr_num[12];
echo '';
//很明顯,用陣列,條件和方法更好分離。
/* ;lisp
(setf a 3)
(setf trans '((1 . "one")
(2 . "two")
(3 . "three")
(3 . "three2")))
(print (cdr (assoc 'a trans))) */
?>
基於陣列對if
語句的重構。
用if時。
<?php
$table = 'test_order';
if ($table === 'test_order' or
$table === 'test_client' or
$table === 'test_area')
else
?>
用陣列代替多個or
時。<?php
$table = 'test_order';
$arr = array(
'test_order' => '',
'test_area' => '',
'test_client' => '',);
if (isset($arr[$table]))
else
?>
很明顯用陣列**更少,更重要的是,資料可以作為值來傳遞,而在php
中,**是不能作為資料結構來傳遞的。當然,有時候用陣列會損失一點點效率,但不是系統瓶頸的話,是不值得去優化的——過早優化之所以不好,是因為很多時候優化 約等於 「寫死」, 也就失去了靈活性。
基於switch
和函式對
if語句的重構。
<?php
$inkai_pattern = '3';
$dly_summary = 123;
$dly_sum_nyukai = 55;
$dly_nyu_keskin2 = 1;
$dly_nyu_keskin3 = 2;
$dly_nyu_keskin4 = 4;
$dly_nyu_keskin5 = 8;
$dly_nyu_keskin6 = 16;
$dly_dpe_urikin = 13;
$dly_bup_urikin = 14;
//重構前的**——先輩的** 變數都是些日語拼音,不過我們單位多數的表都是日語拼音命名的。
if ($inkai_pattern == "1")
elseif ($inkai_pattern == "2")
elseif ($inkai_pattern == "3")
elseif ($inkai_pattern == "4")
elseif ($inkai_pattern == "5")
elseif ($inkai_pattern == "6")
var_dump($dly_nyu_genkin, $dly_tenant_kin);
// 重構後的**
list($dly_nyu_genkin, $dly_tenant_kin) = get_cash_deposit($inkai_pattern, array(
'all_summary' => $dly_summary,
'all_sum_nyukai' => $dly_sum_nyukai,
'bup_urikin' => $dly_dpe_urikin,
'dpe_urikin' => $dly_bup_urikin,
'nyu_keskin2' => $dly_nyu_keskin2,
'nyu_keskin3' => $dly_nyu_keskin3,
'nyu_keskin4' => $dly_nyu_keskin4,
'nyu_keskin5' => $dly_nyu_keskin5,
'nyu_keskin6' => $dly_nyu_keskin6,
));var_dump($dly_nyu_genkin, $dly_tenant_kin);
function get_cash_deposit($inkai_pattern, $data)
= $val;}
}
$sum_nyu_keskin = $nyu_keskin2 + $nyu_keskin3 + $nyu_keskin4 + $nyu_keskin5 + $nyu_keskin6;
$nik_data = 0;
$tenant_kin = 0;
switch ($_pattern)
return array($nik_data, $tenant_kin); }
?>
很明顯用陣列**更少,更重要的是,資料可以作為值來傳遞,而在php
中,**是不能作為資料結構來傳遞的。當然,有時候用陣列會損失一點點效率,但不是系統瓶頸的話,是不值得去優化的——有時候優化之所以不好,是因為很多時候優化 約等於 「寫死」, 也就失去了靈活性。
php手冊中
switch
這一章講了很多細節,大家可以看下。
由於這一章**多一些,希望剛剛學程式設計的人就不要用記事本了。建議用nopepad++
或pspad
做文字編輯器,然後從易到難,再學習
vi。ide會有一些很有用的提示(偶爾會打擾思路,但對初學者非常有用),個人推薦netbeans這個整合環境做開發。
Python入門第三天
pyhton3 第三方庫文件檢視 python m pydoc p 1234然後再瀏覽器中輸入 localhost 1234 字串 s.title 將字串的首字母大寫 s.upper 轉化為大寫 s.lower 轉化為小寫 s.swapcase 大小寫交換 s.isalnum 檢查是否全部是字母或數...
python入門第三天 繼承
繼承物件導向的程式設計最好的用處則是 的重用 實現重用的重要方法是通過繼承機制 class schoolmember def init self,name,age self.name name self.age age print initialized schoolmember s self.na...
Python入門第三天 分支和迴圈
針對不同的條件實現不同的操作 不同條件之間滿足 如果其中乙個條件已經滿足了,就沒有必要判斷其他條件的必要 if 條件語句1 段1 elif 條件語句2 段2 elif 條件語句3 段3 else 段n result1 30if 10 20else 40print result1 result2 30...