php:write isset函数,返回value或null

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在函数被调用之前.

关于如何编写这样一个函数的任何想法?它甚至可能吗?

我意识到这里这里发布一些解决方案,但这些解决方案仅适用于阵列.

Leo*_*Leo 8

在阅读有关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)

希望这有助于任何人寻找类似的解决方案.


Pau*_*aul 6

PHP 7 有一个新的“空合并运算符”,它就是这样做的。是双吗??如:

$foo = $mixed ?? null;
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/migration70.new-features.php