I've not completely read this book through yet, so this is only a partial review of the content I have got through so far.
From what I've read I'd say that this is for the most part a high quality book that gives a lot of good advice. It makes a strong argument as to why dependency injection is tremendously preferable to hard coded dependencies and it describes in detail the kinds of problems you can run into if you do hard code your dependencies.
There are some things in the chapters on testing that I think need to be addressed, though. The main one is it advocates direct testing of non-public methods (by subclassing the CUT to expose its protected methods as public). This can make the test fragile, as it's now making assumptions about the inner workings of the class instead of testing its API. Normally you should be able to change or completely remove non-public code without having to worry about the effect it has on the tests. If you're testing non-public methods directly, then you can easily break a test by changing or removing it, making the test fragile. Fragile tests are something the book argues against, with good reason.
If you exercise all the public methods of a class properly within your unit test, then all the non-public methods should also be exercised as well. If they are not, then this indicates that either the unit test isn't thorough enough, or that there is dead code in the CUT.
This is still, however, a very useful resource, and written to a much higher standard than most PHP books. I'd say it's a must-read, and would have given it 5 stars if not for the non-public method testing remarks.