PHPにはより短いIFステートメントが存在しますか?
-
22-09-2019 - |
質問
これを書き直すことは、どういうわけか短くなることができますか?
if (isset($_POST['pic_action'])){
$pic_action=$_POST['pic_action'];
}
else {
$pic_action=0;
}
どこかで見たことがありますが、忘れてしまいました...:/
ところで、あなたが好きならあなたのコードも説明してください!
ありがとう
解決
使用できます 条件付き演算子 ?:
:
$pic_action = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;
条件付き演算子式 expr1 ? expr2 : expr3
の返品値に評価します expr2
評価された返品値の場合 expr1
は 真実;それ以外の場合は、式は評価された返品値に評価されます expr3
. 。だから isset($_POST['pic_action'])
に評価します 真実, 、表現全体が評価された値に評価されます $_POST['pic_action']
の評価された値に 0
それ以外は。
要するに:if isset($_POST['pic_action'])
本当です、 $pic_action
の価値を保持します $_POST['pic_action']
と 0
それ以外は。
他のヒント
ガンボの答えはおそらく最良の方法です。
次のように書くこともできます。
$pic_action = 0;
if (isset($_POST['pic_action'])){
$pic_action=$_POST['pic_action'];
}
$pic_action=(isset($_POST['pic_action']))?($_POST['pic_action']):0;
$pic_action = array_get($_POST, 'pic_action', 0);
上記の行には必要です array_get
以下に定義されている関数。からのソース コハナの Arr
クラス. 。非常に小さく一般的な関数。たとえば、すべての配列で使用できます $_GET
.
/**
* Retrieve a single key from an array. If the key does not exist in the
* array, the default value will be returned instead.
*
* @param array array to extract from
* @param string key name
* @param mixed default value
* @return mixed
*/
function array_get(array $array, $key, $default = NULL)
{
return isset($array[$key]) ? $array[$key] : $default;
}
長いが再利用可能:
$pic_action = QueryPost('pic_action', 0);
function QueryPost($name, $default='', $valid=false) {
if (!isset($_POST[$name])) return $default;
if (($valid) and (empty($_POST[$name]))) return $default;
return $_POST[$name];
}
または、QueryPost関数に検証の形式を実行することもできます。
$pic_action = QueryPost('pic_action', 'int', 0);
function QueryPost($name, $rule, $default='', $valid=false) {
// this shouldn't be too hard to write
}
できるよ:
$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;
所属していません StackOverflow