Leo*_*Leo 5 php null function default-value isset
我在项目周围的许多地方(数千个地方)都有以下代码:
$foo = isset($mixed) ? $mixed : null;
Run Code Online (Sandbox Code Playgroud)
哪里$mixed可以是任何东西:数组,数组元素,对象,对象属性,标量等.例如:
$foo = isset($array['element']) ? $array['element'] : null;
$foo = isset($nestedArray['element']['key']) ? $nestedArray['element']['key'] : null;
$foo = isset($object->prop) ? $object->prop : null;
$foo = isset($object->chain->of->props) ? $object->chain->of->props : null;
Run Code Online (Sandbox Code Playgroud)
有没有办法将这个重复的逻辑写成(简单)函数?例如,我尝试过:
function myIsset($mixed)
{
return isset($mixed) ? $mixed : null;
}
Run Code Online (Sandbox Code Playgroud)
上面的函数看起来会起作用,但实际上并没有.例如,如果$object->prop不存在,并且我调用myIsset($object->prop)),那么我会得到致命的错误:Undefined property: Object::$prop在函数被调用之前.
关于如何编写这样一个函数的任何想法?它甚至可能吗?
在阅读有关php引用时,我偶然发现了自己的问题的答案.我的解决方案如下:
function issetValueNull(&$mixed)
{
return (isset($mixed)) ? $mixed : null;
}
Run Code Online (Sandbox Code Playgroud)
现在调用此函数看起来像:
$foo = issetValueNull($array['element']);
$foo = issetValueNull($nestedArray['element']['key']);
$foo = issetValueNull($object->prop);
$foo = issetValueNull($object->chain->of->props);
Run Code Online (Sandbox Code Playgroud)
希望这有助于任何人寻找类似的解决方案.
PHP 7 有一个新的“空合并运算符”,它就是这样做的。是双吗??如:
$foo = $mixed ?? null;
Run Code Online (Sandbox Code Playgroud)
见http://php.net/manual/en/migration70.new-features.php