Есть ли ярлык для «isset construct»?

Я часто пишу эту строку кода:

$myParam = isset($params['myParam']) ? $params['myParam'] : 'defaultValue'; 

Как правило, это делает линию очень длинной для вложенных массивов.

Могу ли я сделать его короче?

Related of "Есть ли ярлык для «isset construct»?"

 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 – это языковая конструкция, поэтому ее перенос в прокси-функцию ухудшает производительность, хотя деградация, вероятно, будет меньше, чем тривиальная (даже не стоит упоминать об этом).

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 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% одинаковы.

Я мало использую этот маленький магический класс, который работает как переменный

 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)){ ... } 

Нет. К сожалению, вы не можете. Не по-хорошему. Вы, по крайней мере, должны уступить на выступление.

Обновление : с PHP7, ?? будет делать именно это. См. https://wiki.php.net/rfc/isset_ternary

Если вам нужно делать это часто, вы, вероятно, не понимаете смысла.

Фактически, переменные должны быть определены перед использованием .
Таким образом, не должно быть случая, когда у вас есть свой параметр undefined.
Просто создайте файл параметров по умолчанию и инициализируйте каждую переменную.

 $params['myParam'] = 'defaultValue'; 

позже он может быть изменен при некоторых событиях, но он никогда не будет неопределенным.
Есть идея?