推 LaPass:才五個條件,這樣已經夠了,除非你的條件有幾十個再用其他 01/18 16:28
→ LaPass:方法 01/18 16:28
→ lottemarines:因為後面kind 類別有五六種以上,會造成類似程式 01/18 16:30
→ lottemarines:出現三十次以上,才想說要怎麼弄得更好 01/18 16:30
→ tkdmaf:你有沒有發現相同的地方跟不同的地方? 01/18 18:36
→ rock810:重複的地方不要寫出來,照樣列表,就知道程式怎麼設計 01/19 09:30
> -------------------------------------------------------------------------- <
作者: tkdmaf (皮皮快跑) 看板: PHP
標題: Re: [請益] 邏輯判斷簡化的問題
時間: Fri Jan 18 18:50:35 2013
※ 引述《lottemarines (一平)》之銘言:
: 程式如下:
: 我這樣寫當然是沒問題,但一看就知道不對啊。
: 一定有更好的方法可以達成簡潔的程式碼然後可以做到一樣的效果吧?
: 跪求高手指導^ ^
: if (($_POST[tx_kind]==1) && ($_POST[tx_usage]!=0)) {
: die('如果類別是購買,則使用量應為0');
: }
: if (($_POST[tx_kind]==1) && ($_POST[tx_borrow]!=0)) {
: die('如果類別是購買,則借用量應為0');
: }
: if (($_POST[tx_kind]==1) && ($_POST[tx_doctor]!=0)) {
: die('如果類別是購買,則不應有操作醫師');
: }
: if (($_POST[tx_kind]==1) && ($_POST[tx_member]!=0)) {
: die('如果類別是購買,則不應有操作人員');
: }
: if (($_POST[tx_kind]==1) && ($_POST[tx_member_ppf]!=0)) {
: die('如果類別是購買,則不應有操作人員');
: }
這是其中一種寫法。
$errorConfig = array(
'tx_usage' => '使用量應為0',
'tx_borrow' => '借用量應為0',
'tx_doctor' => '不應有操作醫師',
下略...
}
if($_POST['tx_kind'] == 1){
foreach($errorConfig as $key => $value){
if($_POST[$key] != 0){
die('如果類別是購買,則'.$value);
}
}
}
快下班前隨便想的東西,沒測過不知道有沒有問題。
概念大概是這樣。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.217.49
> -------------------------------------------------------------------------- <
作者: gpmm (銀色) 看板: PHP
標題: Re: [請益] 邏輯判斷簡化的問題
時間: Fri Jan 18 21:24:14 2013
※ 引述《lottemarines (一平)》之銘言:
: 程式如下:
: 我這樣寫當然是沒問題,但一看就知道不對啊。
: 一定有更好的方法可以達成簡潔的程式碼然後可以做到一樣的效果吧?
我不太確定你是想問「整潔」的程式碼,
還是一個有架構,好理解,好擴充的程式碼 XDD
基本上這兩者是稍微有點背道而馳的,
: 跪求高手指導^ ^
: if (($_POST[tx_kind]==1) && ($_POST[tx_usage]!=0)) {
: die('如果類別是購買,則使用量應為0');
: }
: if (($_POST[tx_kind]==1) && ($_POST[tx_borrow]!=0)) {
: die('如果類別是購買,則借用量應為0');
: }
: if (($_POST[tx_kind]==1) && ($_POST[tx_doctor]!=0)) {
: die('如果類別是購買,則不應有操作醫師');
: }
: if (($_POST[tx_kind]==1) && ($_POST[tx_member]!=0)) {
: die('如果類別是購買,則不應有操作人員');
: }
: if (($_POST[tx_kind]==1) && ($_POST[tx_member_ppf]!=0)) {
: die('如果類別是購買,則不應有操作人員');
: }
岔題回別的,我自己是不太建議 $_POST[tx_kind] 這樣使用變數
比較好的寫法是 $_POST['tx_kind'] 這樣,
因為實際上你是去取 $_POST 這個 hash table 的 'tx_kind' 字串索引的值,
而之所以在這裡 tx_kind 可以和 'tx_kind' 通用,
是因為在 PHP 裡,不加 $ 的可用變數字串會先被判別是否為常數,
如果不是常數,才會被視為字串,
也就是說,如果我在前面做了 define ('tx_kind', 1) 這個宣告,
$_POST[tx_kind] 實際上會變成 $_POST[1],引發不再預期內的錯誤,
所以…(攤手) XDD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 101.10.100.163
→ rock810:有顏色有加分 01/19 09:31
> -------------------------------------------------------------------------- <
作者: dlikeayu (太陽拳vs野球拳) 看板: PHP
Class MyType
{
public tx_kind;
public tx_member;
public tx_member_ppf;
public tx_doctor;
public tx_borrow;
public function result()
{
if($this->tx_kind == 1)
{
//TODO你要做的事
//也可以把那些子類別弄成array來跑foreach
if($this->tx_member != 0)
{
die("messages");
}
}
}
}
$obj = new MyType;
//TODO 你的方法 可能是
$obj->tx_kind =1;
$obj->tx_member=2;
//接下來你只要每次去TODO你該加總這五個類別的事情,最後result
$obj->result();
雖然跟直接寫function差不多,但是這些物件可以回存和自檢
你只要定義好一樣類別以後都拿來使用就行了
好比你有該類別外的function去計算你這些物件,當錯誤時想改寫,就只要
$obj->tx_member = 0;
也可在class裏寫個save(),當檢查改寫都過時,就存入資料庫
可以多自義義validation在你的class裏,以做到一次性管理跟使用
再來就是這類別裏的物件你也可以用array來更加速迴圈運用
這不知是你要的整潔還是好管理呢@@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.249.165.163
※ 編輯: dlikeayu 來自: 111.249.165.163 (01/22 00:58)
噓 tkdmaf:不要問我為什麼噓你。 01/22 09:38