3

このようなことは、PHP では問題ないと考えられますか?

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

これに代わるよりクリーンな方法はありますか? 私は基本的に余分なテーブルルックアップを避けようとしています。

4

5 に答える 5

3

custom_is_valid() は空の変数をチェックしますか? empty() と「or not」を削除できることは、そのコードを改善するのに大いに役立つからです。

于 2009-08-19T18:14:04.027 に答える
2

オンにするとわかるようerror_reporting(E_ALL)に、それは実際には最善の方法ではありません。PHPは基本的にあなたにやってほしい

$foo = empty($_GET['foo']) || !custom_is_valid($_GET['foo']) ? 'default' : $_GET['foo'];
于 2009-08-19T18:17:11.303 に答える
0

どうですか:

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

そして、配列のルックアップを恐れないでください。それほど遅くはありません:)

于 2009-08-19T18:24:08.013 に答える
0

おそらく、有効かどうかをチェックするだけでなく、デフォルトを取るクリーニング関数を使用して実行してください。

また、次の関数を使用するのが好きなので、E_STRICT の実行時に存在しない配列キーにアクセスしても警告が表示されません。

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');
于 2009-08-19T18:25:14.270 に答える
0

ここでのクラスは、あなたの人生をずっと楽にしてくれるでしょう。

<?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>';
于 2009-08-19T18:43:30.550 に答える