检查变量是否'isset'并以不同方式分配

时间:2016-03-30 14:40:20

标签: php loops

我有以下内容:

$front = $data->getFromTable('Front');
$back  = $data->getFromTable('Back');
$side  = $data->getFromTable('Side');
$top   = $data->getFromTable('Top');

我想检查这些变量是否为'set'并为它们分配不同的图像,例如

if (!isset($front))
{
    $this->setImage('bla bla');
}
else 
{
    $this->setImage('bla2 bla2');
}

有没有更有效的方法来做到这一点,而不仅仅是4 if / else语句,想象我有100个变量而不是4个。

感谢。

3 个答案:

答案 0 :(得分:3)

很难确切地说,因为它取决于“图像”变量的变化程度。如果他们遵循某个命名约定你可能会使用如下所示的循环,如果没有,那么它可能会有很多检查,但是你可以把一个巨大的if / else链放在一个函数中设置图像的主要逻辑所以它读起来更好。

$requiredFields = ['front', 'back', 'side', 'top'];

foreach ($requiredFields as $field) {
    $image = $field . 'NotSetImage.jpg';
    if (isset($field)) {
        $image = $field . 'SetImage.jpg';
    }

    $this->setImage($image);
}

仅仅是个人偏好,但我发现代码在不使用else语句的情况下更具可读性,我还发现如果你的if语句旨在评估 true ,那么它更容易理解,我不知道表示布尔值为true,但不检查图像是否未设置,而是检查是否已设置

最后一点,但最好是对empty()检查,而不是isset()检查您的值。

答案 1 :(得分:1)

您可以使用单行if / else语句:

$front = !isset($front) ? $this->setImage('bla bla') : $this->setImage('bla2 bla2');

答案 2 :(得分:0)

你也可以这样做:

$requiredFields = ['front', 'back', 'side', 'top'];

foreach ($requiredFields as $field) {
    if (!isset($data->getFromTable($field))) $this->setImage('bla bla'); else $this->setImage('bla2 bla2');
}