diff --git a/fixtures/f013/A.php b/fixtures/f013/A.php index aa0393d..ac70988 100644 --- a/fixtures/f013/A.php +++ b/fixtures/f013/A.php @@ -2,6 +2,7 @@ namespace DeepCopy\f013; +use BadMethodCallException; use Doctrine\Persistence\Proxy; class A implements Proxy @@ -11,14 +12,15 @@ class A implements Proxy /** * @inheritdoc */ - public function __load() + public function __load(): void { } /** * @inheritdoc */ - public function __isInitialized() + public function __isInitialized(): bool { + throw new BadMethodCallException(); } } diff --git a/fixtures/f013/B.php b/fixtures/f013/B.php index 89425d8..d1382e6 100644 --- a/fixtures/f013/B.php +++ b/fixtures/f013/B.php @@ -2,6 +2,7 @@ namespace DeepCopy\f013; +use BadMethodCallException; use Doctrine\Persistence\Proxy; class B implements Proxy @@ -11,15 +12,16 @@ class B implements Proxy /** * @inheritdoc */ - public function __load() + public function __load(): void { } /** * @inheritdoc */ - public function __isInitialized() + public function __isInitialized(): bool { + throw new BadMethodCallException(); } public function getFoo() diff --git a/src/DeepCopy/DeepCopy.php b/src/DeepCopy/DeepCopy.php index 3937542..4555d42 100644 --- a/src/DeepCopy/DeepCopy.php +++ b/src/DeepCopy/DeepCopy.php @@ -89,9 +89,11 @@ public function skipUncloneable($skipUncloneable = true) /** * Deep copies the given object. * - * @param mixed $object + * @template TObject * - * @return mixed + * @param TObject $object + * + * @return TObject */ public function copy($object) { @@ -270,7 +272,9 @@ function ($object) { } } - $property->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $property->setAccessible(true); + } // Ignore uninitialized properties (for PHP >7.4) if (method_exists($property, 'isInitialized') && !$property->isInitialized($object)) { diff --git a/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php b/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php index e6d9377..66e91e5 100644 --- a/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php +++ b/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php @@ -19,7 +19,9 @@ public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); - $reflectionProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $reflectionProperty->setAccessible(true); + } $oldCollection = $reflectionProperty->getValue($object); $newCollection = $oldCollection->map( diff --git a/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php b/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php index 7b33fd5..fa1c034 100644 --- a/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php +++ b/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php @@ -21,7 +21,9 @@ class DoctrineEmptyCollectionFilter implements Filter public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); - $reflectionProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $reflectionProperty->setAccessible(true); + } $reflectionProperty->setValue($object, new ArrayCollection()); } diff --git a/src/DeepCopy/Filter/ReplaceFilter.php b/src/DeepCopy/Filter/ReplaceFilter.php index 7aca593..fda8e72 100644 --- a/src/DeepCopy/Filter/ReplaceFilter.php +++ b/src/DeepCopy/Filter/ReplaceFilter.php @@ -30,7 +30,9 @@ public function __construct(callable $callable) public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); - $reflectionProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $reflectionProperty->setAccessible(true); + } $value = call_user_func($this->callback, $reflectionProperty->getValue($object)); diff --git a/src/DeepCopy/Filter/SetNullFilter.php b/src/DeepCopy/Filter/SetNullFilter.php index bea86b8..6722272 100644 --- a/src/DeepCopy/Filter/SetNullFilter.php +++ b/src/DeepCopy/Filter/SetNullFilter.php @@ -18,7 +18,9 @@ public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); - $reflectionProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $reflectionProperty->setAccessible(true); + } $reflectionProperty->setValue($object, null); } } diff --git a/src/DeepCopy/Matcher/PropertyTypeMatcher.php b/src/DeepCopy/Matcher/PropertyTypeMatcher.php index c7f4690..7980bfa 100644 --- a/src/DeepCopy/Matcher/PropertyTypeMatcher.php +++ b/src/DeepCopy/Matcher/PropertyTypeMatcher.php @@ -39,7 +39,9 @@ public function matches($object, $property) return false; } - $reflectionProperty->setAccessible(true); + if (PHP_VERSION_ID < 80100) { + $reflectionProperty->setAccessible(true); + } // Uninitialized properties (for PHP >7.4) if (method_exists($reflectionProperty, 'isInitialized') && !$reflectionProperty->isInitialized($object)) { diff --git a/tests/DeepCopyTest/Matcher/Doctrine/DoctrineProxyMatcherTest.php b/tests/DeepCopyTest/Matcher/Doctrine/DoctrineProxyMatcherTest.php index 22e380d..38de911 100644 --- a/tests/DeepCopyTest/Matcher/Doctrine/DoctrineProxyMatcherTest.php +++ b/tests/DeepCopyTest/Matcher/Doctrine/DoctrineProxyMatcherTest.php @@ -39,7 +39,7 @@ class FooProxy implements Proxy /** * @inheritdoc */ - public function __load() + public function __load(): void { throw new BadMethodCallException(); } @@ -47,7 +47,7 @@ public function __load() /** * @inheritdoc */ - public function __isInitialized() + public function __isInitialized(): bool { throw new BadMethodCallException(); }