Gibt es eine kürzere wenn auch in PHP?
-
22-09-2019 - |
Frage
Ist es möglich, dies neu zu schreiben, um irgendwie kürzer zu sein?
if (isset($_POST['pic_action'])){
$pic_action=$_POST['pic_action'];
}
else {
$pic_action=0;
}
Ich habe es irgendwo gesehen, aber vergessen ...:/
Übrigens, bitte erklären Sie Ihren Code auch, wenn Sie möchten!
Vielen Dank
Lösung
Sie könnten die verwenden Bedingender Bediener ?:
:
$pic_action = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;
Der Ausdruck des bedingten Operators expr1 ? expr2 : expr3
bewertet den Rückgabewert von expr2
Wenn der bewertete Rückgabewert von expr1
ist Stimmt; Andernfalls bewertet der Ausdruck den bewerteten Rückgabewert von expr3
. Also wenn isset($_POST['pic_action'])
bewertet Stimmt, Der gesamte Ausdruck bewertet den bewerteten Wert von $_POST['pic_action']
und zum bewerteten Wert von 0
Andernfalls.
Kurz gesagt: wenn isset($_POST['pic_action'])
ist wahr, $pic_action
wird den Wert von halten $_POST['pic_action']
und 0
Andernfalls.
Andere Tipps
Gumbos Antwort ist wahrscheinlich der beste Weg.
Es kann auch geschrieben werden als:
$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);
Die obige Linie erfordert die array_get
Funktion unten definiert. Quelle aus Kohana Arr
Klasse. Sehr kleine und generische Funktion. Kann in allen Arrays verwendet werden, z. B. $_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;
}
Länger, aber wiederverwendbar:
$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];
}
Oder Sie können die Querypost -Funktion eine Form der Validierung durchführen, während Sie dabei sind.
$pic_action = QueryPost('pic_action', 'int', 0);
function QueryPost($name, $rule, $default='', $valid=false) {
// this shouldn't be too hard to write
}
Du kannst tun:
$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;