Php,isset - 默认值,可以简化吗?

时间:2016-04-13 08:18:48

标签: php mysql

这是:

$result = $this->getSomething();

$db = new Db();
$db->save($result['DATA']); // might exists or not
$db->save($result['IP']); // might exists or not
$db->save($result['X']); // might exists or not

但这些数组键不确定是否存在。我总是可以写下这个:

$result = $this->getSomething();

if (!isset($result['DATA']))
{
    $result['DATA'] = null;
}
//same for the other keys

$db = new Db();
$db->save($result['DATA']);
$db->save($result['IP']);
$db->save($result['X']);

但这是非常繁琐的工作。有什么方法可以简化这个吗?

4 个答案:

答案 0 :(得分:5)

从PHP 7开始(无论如何都应该开始使用),您可以使用新的coalesce运算符来执行此操作:

$db->save($result['DATA'] ?? null);

答案 1 :(得分:2)

$result = $this->getSomething();
$result += array_fill_keys(['DATA', 'IP', 'X'], null);

这会填充null不存在的任何密钥 甚至可以写成$result = $this->getSomething() + array_fill_keys(..);

答案 2 :(得分:1)

你可以这样做:

$data = !isset($result['DATA']) ? null : $result['Data'];
$ip = !isset($result['IP']) ? null : $result['IP'];
etc...

答案 3 :(得分:1)

如果您使用OOP方式

会更好

你的方法getSomething()必须返回某个类的实例(例如SomeData)而不是数组

/**
 * @return SomeData
 */
public function getSomething()
{
    /*
     * some code
     */

    return new SomeData($data, $x, $ip);
}

SomeData类

class SomeData
{
private $data;
private $ip;
private $x;

public function __construct($data, $ip, $x)
{
    $this->data = $data;
    $this->ip = $ip;
    $this->x = $x;
}

/**
 * @return mixed
 */
public function getData()
{
    return $this->data;
}

/**
 * @param mixed $data
 */
public function setData($data)
{
    $this->data = $data;
}

/**
 * @return mixed
 */
public function getIp()
{
    return $this->ip;
}

/**
 * @param mixed $ip
 */
public function setIp($ip)
{
    $this->ip = $ip;
}

/**
 * @return mixed
 */
public function getX()
{
    return $this->x;
}

/**
 * @param mixed $x
 */
public function setX($x)
{
    $this->x = $x;
}

}

最后,你不用担心isset等就可以使用结果。

$result = $this->getSomething();

$db = new Db();
$db->save($result->getData());
$db->save($result->getIp());
$db->save($result->getX());