Я часто пишу эту строку кода:
$myParam = isset($params['myParam']) ? $params['myParam'] : 'defaultValue';
Как правило, это делает линию очень длинной для вложенных массивов.
Могу ли я сделать это короче?
Я часто пишу эту строку кода:
$myParam = isset($params['myParam']) ? $params['myParam'] : 'defaultValue';
Как правило, это делает линию очень длинной для вложенных массивов.
Могу ли я сделать это короче?
PHP 7 будет содержать оператор ??
, который делает именно это.
См. https://wiki.php.net/rfc/isset_ternary, пример:
// Fetches the request parameter user and results in 'nobody' if it doesn't exist
$username = $_GET['user'] ?? 'nobody';
// equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
function getOr(&$var, $default) {
if (isset($var)) {
return $var;
} else {
return $default;
}
}
$myParam = getOr($params['myParam'], 'defaultValue');
Обязательно передайте переменную по ссылке, иначе код будет выдавать E_NOTICE. Также здесь используется намерение if/else вместо тернарного оператора, поэтому zval может быть разделен, если вы используете PHP < 5.4.0RC1.
Да, создав прокси-функцию, но действительно ли это стоит?
Кроме того, isset
- это языковая конструкция, поэтому ее перенос в прокси-функции будет снижать производительность, хотя деградация, вероятно, будет меньше тривиальной (даже не стоит упоминать об этом).
Это то, что я использую:
function getindex($arr, $index, $default = null) {
return isset($arr[$index]) ? $arr[$index] : $default;
}
Начиная с PHP 5.3 вы можете использовать:
$myParam = $params['myParam'] ?: 'defaultValue';
Обратите внимание, что $params['myParam']
и isset($params['myParam'])
не являются на 100% одинаковыми.
Нет. К сожалению, вы не можете. Не по-хорошему. Вам, по крайней мере, придется сдаваться на производительность.
Обновить: поскольку PHP7, ??
сделает именно это. См. https://wiki.php.net/rfc/isset_ternary
Я использую маленький этот маленький магический класс, который работает как переменная
class Post() {
private $post = Array();
public function __construct() {
$this->post = $_POST;
}
public function __get($name) {
return @$this->post[$name];
}
public function __set($name, $value) {
return $this->post[$name] = $value;
}
public function __call($function, $params) {
if(isset($this->post[$function])) {
return $this->post[$function];
} else {
$this->post[$function] = $params[0];
return $params[0];
}
}
}
$post = new Post();
то в документе вы можете легко использовать его как любую другую переменную, например, $post->name
$post->somelist[2]
или со значением по умолчанию $post->name("John Doe")
, после чего вы получите его, а также сохранили.
Я знаю, что это ничего не сокращает для вас, но я думал, что просто передам это, я использую это много в своих приложениях, чтобы убедиться, что что-то установлено и имеет значение.
function is_blank($var = NULL){
return empty($var) && !is_numeric($var) && !is_bool($var);
}
function chk_var($var = NULL){
return (isset($var) && !is_null($var) && !is_blank($var));
}
Тогда...
if(chk_var($myvar)){ ... }
Если вы часто это делаете, вам, вероятно, не хватает смысла.
Фактически, перед использованием следует определить переменные .
Таким образом, не должно быть случая, когда у вас есть ваш параметр undefined.
Просто создайте файл параметров по умолчанию и инициализируйте каждую переменную.
$params['myParam'] = 'defaultValue';
позже он может быть изменен в некоторых случаях, но никогда не будет undefined.
Есть идея?