Skip to content

Instantly share code, notes, and snippets.

@samsamm777
Last active April 26, 2024 13:24
Show Gist options
  • Save samsamm777/7230159 to your computer and use it in GitHub Desktop.
Save samsamm777/7230159 to your computer and use it in GitHub Desktop.
PHP set private property value using reflection. This allows you to set a private property value from outside the object, great for PHPUnit testing.
<?php
$a = new A();
$reflection = new \ReflectionClass($a);
$property = $reflection->getProperty('privateProperty');
$property->setAccessible(true);
$property->setValue($a, 'new-value');
echo $a->getPrivateProperty();
//outputs:
//new-value
@Amegatron
Copy link

Amegatron commented Apr 10, 2024

You can also use a closure binding:

class A {
  private string $name;
}

$a = new A();

$setter = (function (string $property, mixed $value): void {
    $this->{$property} = $value;
})->bindTo($a, $a);
$setter('name', 'Name');

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment