bug #16462 [PropertyAccess] Fix dynamic property accessing. (dunglas)
This PR was merged into the 2.3 branch. Discussion ---------- [PropertyAccess] Fix dynamic property accessing. | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | n/a | License | MIT | Doc PR | n/a Fix a bug regarding dynamic properties access introduced by #16294. Commits -------916f9e0
[PropertyAccess] Test access to dynamic properties352dfb9
[PropertyAccess] Fix dynamic property accessing.
This commit is contained in:
commit
4f7fd74257
|
@ -404,7 +404,7 @@ class PropertyAccessor implements PropertyAccessorInterface
|
||||||
// returns true, consequently the following line will result in a
|
// returns true, consequently the following line will result in a
|
||||||
// fatal error.
|
// fatal error.
|
||||||
|
|
||||||
$object->{$access[self::ACCESS_NAME]} = $value;
|
$object->$property = $value;
|
||||||
} elseif (self::ACCESS_TYPE_MAGIC === $access[self::ACCESS_TYPE]) {
|
} elseif (self::ACCESS_TYPE_MAGIC === $access[self::ACCESS_TYPE]) {
|
||||||
$object->{$access[self::ACCESS_NAME]}($value);
|
$object->{$access[self::ACCESS_NAME]}($value);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -375,4 +375,32 @@ class PropertyAccessorTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
$this->assertEquals('foobar', $object->getProperty());
|
$this->assertEquals('foobar', $object->getProperty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider getValidPropertyPaths
|
||||||
|
*/
|
||||||
|
public function testSetValue($objectOrArray, $path)
|
||||||
|
{
|
||||||
|
$this->propertyAccessor->setValue($objectOrArray, $path, 'Updated');
|
||||||
|
|
||||||
|
$this->assertSame('Updated', $this->propertyAccessor->getValue($objectOrArray, $path));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getValidPropertyPaths()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array(array('Bernhard', 'Schussek'), '[0]', 'Bernhard'),
|
||||||
|
array(array('Bernhard', 'Schussek'), '[1]', 'Schussek'),
|
||||||
|
array(array('firstName' => 'Bernhard'), '[firstName]', 'Bernhard'),
|
||||||
|
array(array('index' => array('firstName' => 'Bernhard')), '[index][firstName]', 'Bernhard'),
|
||||||
|
array((object) array('firstName' => 'Bernhard'), 'firstName', 'Bernhard'),
|
||||||
|
array((object) array('property' => array('firstName' => 'Bernhard')), 'property[firstName]', 'Bernhard'),
|
||||||
|
array(array('index' => (object) array('firstName' => 'Bernhard')), '[index].firstName', 'Bernhard'),
|
||||||
|
array((object) array('property' => (object) array('firstName' => 'Bernhard')), 'property.firstName', 'Bernhard'),
|
||||||
|
|
||||||
|
// Missing indices
|
||||||
|
array(array('index' => array()), '[index][firstName]', null),
|
||||||
|
array(array('root' => array('index' => array())), '[root][index][firstName]', null),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue