从Real stdClass Object到Mock

时间:2013-04-25 15:21:10

标签: php mocking stdclass

我有一个Soap WebService,它返回具有不同属性的StdClass对象。我想要做的是创建一个Mock对象,模拟WebService返回的StdClass。我不想做的是手动创建模拟对象。我不想序列化,反序列化对象,因为我想在VCS中编辑属性值。

所以基本上我需要转变一下:

stdClass Object
(
    [paramA] => 1
    [paramB] => 2
    [paramC] => 3
    [paramD] => Array
    (
        [0] => stdClass Object
            (
                [paramD1] => 'blabla'
                [paramD2] => 'blabla'

进入这个:

$object = new stdClass;
$object -> paramA = 1;
$object -> paramB = 2;
$object -> paramC = 3;
$object -> paramD -> paramD1 = "blabla";
$object -> paramD -> paramD2 = "blabla";

你会怎么做?

1 个答案:

答案 0 :(得分:0)

快速构建stdClass对象的一个​​好方法是将数组转换为对象(在Type Juggling中概述):

$object = (object) array('prop' => 'value');

如图所示,键成为属性名称,值为值:

echo $object->prop; # value

这也可以在彼此内部工作,就像拥有一个子对象数组一样:

$object = (object) array(
    'prop'     => 'value',
    'children' => array(
        (object) array('prop' => 'value'),
    ),
);

这会给你一些类似的东西:

echo $object->children[0]->prop; # value

看起来这就是你要找的东西。

有关更多示例和变体,请参阅Convert Array to Object PHP