Я бы посоветовал узнать о модульном тестировании и взглянуть на несколько инструментов, доступных для PHP. Я бы порекомендовал PHPUnit , но есть также SimpleTest , который, как я знаю, предпочитают некоторые люди.
Минимизация объема изменяемых данных - это просто хорошая идея в целом. Что касается тестирования, вы можете написать модульные тесты, которые выполняют небольшие, элементарные функциональные возможности, не беспокоясь о том, что переменные были изменены как побочный эффект какой-либо другой операции. Если вы хотите проверить, что состояние объекта - это a, b или c, вы знаете, что нужно проверять, потому что точно знаете, какие операции могут влиять на состояние. Если ваше состояние является глобальным, вы не представляете, какие другие операции в вашем приложении могут повлиять на него, оставляя вам сложную кучу спагетти для обслуживания.
Джошуа Блох хорошо объясняет это в Effective Java, Item 29 . Я бы порекомендовал прочитать это, даже если он не использует PHP, концепция та же самая.
Что касается модульного тестирования, я бы порекомендовал Прагматическое модульное тестирование , опубликованное The Pragmatic Programmers. Существуют версии для Java / JUnit и C # / NUnit, но концепции полностью применимы к PHP, особенно если вы используете PHPUnit, который следует шаблонам xUnit достаточно близко.