2009-08-19 23 views
3

PHPでこのようなことはOKと考えられますか?PHP条件付き演算子と自己代入

$foo = $_GET['foo']; 
$foo = empty($foo) || !custom_is_valid($foo) ? 'default' : $foo; 

これよりもクリーンな方法がありますか?私は基本的に余分なテーブル検索を避けようとしています。

答えて

2

error_reporting(E_ALL)をオンにしてもわかるように、そうするのは本当に最適な方法ではありません。 PHPは基本的に、あなたがやりたいについてどのよう

$foo = empty($_GET['foo']) || !custom_is_valid($_GET['foo']) ? 'default' : $_GET['foo']; 
+0

PHP仕様書では、テーブルルックアップのパフォーマンスが保証されていますか? –

+3

あなたはPHP仕様があると思います。 :/ – chaos

+0

私は分かりません。 ;)私はC++のバックグラウンドを持っていて、数時間前にPHPを使い始めました。 –

3

custom_is_valid()は空の変数をチェックしますか? empty()と "or not"を取り除くことができれば、そのコードを改善するためには長い道が開かれるからです。

+0

'$ _GET ['foo']'が存在しない場合でも警告が表示されます。 – chaos

+0

のみ: "$ foo = custom_is_valid($ _ GET ['foot']);"、custom_is_valid(..)のチェックデータ、ok? –

0

$foo = 'default'; 
if (array_key_exists('foo', $_GET) and custom_is_valid($_GET['foo'])) { 
    $foo = $_GET['foo']; 
} 

と配列検索を恐れてはいけません、彼らは

0

を:)その遅いではありませんおそらくだけではなくチェックします有効な場合は、デフォルトのクリーニング機能を実行します。ここ

function GetVar($var, $default = '') { 
    $value = $default; 
    if(isset($_GET[$var])) { 
    $value = $_GET[$var]; 
    } 
    return $value; 
} 

function custom_clean($value, $default = '') { 
    ... validation logic or return $default ... 
} 

$foo = custom_clean(GetVar('foo'), 'default'); 
0

クラスは、あなたの人生がずっと楽になるだろう:

はまた、私はE_STRICTを実行するときに非existant配列のキーへのアクセスに関する警告を得ることはありませんので、以下の機能を使用したいです。

<?php 

class ParamHelper 
{ 
    protected $source; 

    public function __construct(array $source) 
    { 
    $this->source = $source; 
    } 

    public function get($key, $default=null, $validationCallback=null) 
    { 
    if (isset($this->source[$key]) && !empty($this->source[$key])) 
    { 
     if (is_null($validationCallback) || (!is_null($validationCallback) && call_user_func($validationCallback, $this->source[$key]))) 
     { 
     return $this->source[$key]; 
     } 
    } 
    return $default; 
    } 
} 

// Just for the demo 
function validateUpper($value) 
{ 
    return ($value == strtoupper($value)); 
} 

// Mimic some query-string values 
$_GET['foo'] = 'bar'; 
$_GET['bar'] = 'BAZ'; 
$_GET['lol'] = 'el oh el'; 

$getHelper = new ParamHelper($_GET); 

echo $getHelper->get('foo', 'foo default', 'validateUpper'), '<br>'; 
echo $getHelper->get('bar', 'bar default', 'validateUpper'), '<br>'; 
echo $getHelper->get('baz', 'baz default'), '<br>'; 
echo $getHelper->get('lol'), '<br>'; 
echo $getHelper->get('rofl'), '<br>';