You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
720 B
37 lines
720 B
3 years ago
|
<?php
|
||
|
namespace DeepCopy\TypeFilter\Spl;
|
||
|
|
||
|
use DeepCopy\DeepCopy;
|
||
|
use DeepCopy\TypeFilter\TypeFilter;
|
||
|
|
||
|
/**
|
||
|
* In PHP 7.4 the storage of an ArrayObject isn't returned as
|
||
|
* ReflectionProperty. So we deep copy its array copy.
|
||
|
*/
|
||
|
final class ArrayObjectFilter implements TypeFilter
|
||
|
{
|
||
|
/**
|
||
|
* @var DeepCopy
|
||
|
*/
|
||
|
private $copier;
|
||
|
|
||
|
public function __construct(DeepCopy $copier)
|
||
|
{
|
||
|
$this->copier = $copier;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritdoc}
|
||
|
*/
|
||
|
public function apply($arrayObject)
|
||
|
{
|
||
|
$clone = clone $arrayObject;
|
||
|
foreach ($arrayObject->getArrayCopy() as $k => $v) {
|
||
|
$clone->offsetSet($k, $this->copier->copy($v));
|
||
|
}
|
||
|
|
||
|
return $clone;
|
||
|
}
|
||
|
}
|
||
|
|