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.
36 lines
720 B
36 lines
720 B
<?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;
|
|
}
|
|
}
|
|
|
|
|