2017-08-15 9 views
0

後者の場合、3つの出力を使用して2つの操作を実行しようとしています。PHPの3値の場合に変数の値を設定する

エラーカウントを増やした後の後者の場合、変数にテキスト値を設定しているという問題があります。

私はいくつか試してみましたが、ここでは2つの試みがありますが、どちらも$errors_logの値を設定できません。

Q.どのようにしてternaryの出力に変数値を設定できますか。

$errors_v=0; 
if (validate_username() == false ? null : $errors_v++ && $errors_log='username invalid'); 

if ($errors_v != 0) { 
    echo $errors_log; 
} 

function validate_username() { 
    return true; 
} 

$errors_v=0; 
$errors_log[]; 
if (validate_username() == false ? null : $errors_v++ && $errors_log[]='username invalid'); 

if ($errors_v != 0) { 
    var_dump($errors_log); 
} 

function validate_username() { 
    return true; 
} 
+2

あなたのコードは__readableこととそうでない現在understandable__なければなりません。 –

+0

手入れが行き届いていますか? @u_mulder – Derple

+2

@u_mulderが正しいです。これは読み取り可能です: 'if(!validate_username()){...}'あなたのコードは読むのが難しく、余分な時間が必要です。この2つのルールに従うと、あなたのチームメイトはあなたを尊重します:ドライキス=あなた自身を繰り返してはいけません。 –

答えて

1

私は以下のように私の三元をするだろうし、その後$errors_logが空でない場合とそうでないかどうかを確認、印刷を:$errors_logemptyであり、それはこのようif文の中$errors_v増分であればあればあなただけチェックできますエラーを出してください。

$errors_log[] = validate_username() === false ? null : 'username invalid'; 

if (!empty($errors_log)) { 
    foreach($errors_log as $error) { 
     echo $error; 
    } 
} 

function validate_username() { 
    return true; 
} 

それは、私は本当にあなたの代わりに$errors_log配列を頼りにお勧めしていても、カウンタのaswellを持つことが必要だ場合、あなたはこのような何かを行うことができます:

if (!validate_username()) { 
    $errors_log[] = 'username invalid'; 
    $errors_v++; 
} 
+0

'if($ errors_log){'チェックは役に立たない。 – mickmackusa

+0

@mickmackusaええ、かもしれない、それはうまく動作するようだ。たぶん私はあまりにも多くのJSをコードしている可能性があります。タイ! :) – skolind

+0

あなたの省略形の条件にnull要素を格納しているので、foreach()はページに目に見える影響を与えずにnull値をエコーし​​ます。 – mickmackusa

0

3つの操作で2つの操作を実行することはできません。

if (validate_username() == false ? null : $errors_log='username invalid'); 

if (!empty($errors_log)) { 
    $errors_v++; 
    echo $errors_log; 
} 

function validate_username() { 
    return true; 
} 
+0

> '$ errors_log =' username invalid ')'は動作していないようです。 – Derple

+0

私のコードをコピーしてhttp://writephponline.comに貼り付け、出力は 'username invalid'です。何かエラーがありますか? – DrRoach

+0

後者の場合、2つのことが起こる必要があります。変数値を設定するだけでなく、エラーカウントをインクリメントします。私はそれがカウントなしで動作することを確認しますが、これはカウントが必要なときに要件の他の部分を破ります。 – Derple

1

あなたが「手書き」を混合していると"略式"条件付き構文。

あなたのあいまいな関数名とその戻り値が組み合わされていると、混乱しやすい/直感的ではありません。関数の名前を変更するか、関数が返すブール値を元に戻すことをお勧めします。

DRY and DAMPのコーディング方法を常に使用してください。

コードの後半のアプローチが最初のアプローチよりも優れています。
エラーの配列を生成する場合は、カウンタのインクリメントを気にせず、必要なときに配列を数えるだけです。

あなたのコードを簡略な条件で整理する必要はありません。

コード:(Demo

function bad_username(){ // new meaningful function name 
    return true; 
} 

$errors_log=[]; // declare the variable as an array 
if(bad_username()){ 
    $errors_log[]='username invalid'; // push the value 
} 

if(sizeof($errors_log)){ // count elements in array, if 1 or more display them 
    var_export($errors_log); 
}else{ 
    echo "No Error"; 
} 

出力:

array (
    0 => 'username invalid', 
) 
関連する問題