While it's absolutly correct that direct access to private properties is strictly forbidden in PHP, it's quite disturbing that even reflection cannot do it when you're writing Unit Tests. Sometimes you just want to test whether a private property contains the correct data. With the normal visibility rules you cannot access those from your Unit Tests.
Luckily, as I just read at Tobias Schlitt's Blog, Derick Rethans committed a patch to the PHP 5.3 repository, which allows you to get things done quite easily. You still need to explicitly state that you want to access the value of a protected/private property through reflection by the new method setAccessible(). It's a good thing to avoid people doing stupid things accidentally, but you finally get the access to it.
PHP 5.3 you'll be able to access private properties like this:
But until we'll see a stable PHP 5.3, there we're many working "hacks", which worked for some versions of PHP 5.x - the most current one would be this:
This should get you up and running for PHP 5.2.5 ("older hacks" won't work).
So how could you use it?
I hope those lines of code will help you until PHP 5.3 arrives, as it helps our developers.
Update
As Sebastian points out in his comment to this post, PHPUnit has had support for testing private and protected attributes for quite a while. It can be used via:
I should be reading the documentation much more thoroughly next time (even though I must admit, that none of our developers has known this method, too).
Recent Comments