仅当目标对象存在于源对象中时,才使用辅助函数设置该属性

时间:2017-06-21 13:44:19

标签: php

我正在编写一段数据处理代码,通常必须将目标对象的属性设置为源对象的属性值,但前提是该属性存在于源对象中,如下所示: / p>

if (property_exists($source, 'something')) {
    $target->other = $source->something;
}

(我不使用isset()因为null值也应该传递。)

重复上述代码将是一件痛苦的事。现在我正在使用此功能来执行此操作:

function set_if_exists($target, string $targetProperty, $source, string $sourceProperty)
{
    if (property_exists($source, $sourceProperty)) {
        $target->$targetProperty = $source->$sourceProperty;
    }
}

上面的示例将是

set_if_exists($target, 'other', $source, 'something');

有没有办法实现相同而不必将属性命名为字符串?理想情况下,我希望能够做到像

这样的事情
set_if_exists($target->other, $source->something);

但我不知道如何实现这一目标。它甚至可能吗?

2 个答案:

答案 0 :(得分:0)

array_key_exists仅适用于数组,您正在使用对象。您应该使用property_exists函数来了解对象是否具有特定属性。

您无法以您希望的方式执行此操作,因为不存在的属性将始终返回null,因此无法从该值知道该属性是否存在。

答案 1 :(得分:0)

我的结论是,这是不可能的。在PHP中似乎没有任何机制允许您检查是否存在(可能很深的)属性,isset()内置或??的方式。