Php, как издеваться над экземпляром объекта?

Итак, функция:

function testMe ($a, $b) { $obj = new CalculationObject(); return $obj->calcIt ($a, $b); } 

как насмехаться над этим творением?

Рефакторинг функции для разделения создания объекта и использования объекта.

Если это метод класса, тривиальное решение состоит в том, чтобы сделать $obj свойством класса, чтобы вы могли заменить его макетом.

Если вам всегда нужен новый экземпляр CalculationObject , можно использовать шаблон фабрики.

Пример:

 function testMe ($a, $b) { $obj = $this->factory->getNewCalculationObject(); return $obj->calcIt ($a, $b); } 

Затем замените $this->factory на заглушку, которая возвращает ваш макет для getNewCalculationObject() .

Если это действительно процедурная функция, а не метод, вам нужно передать зависимость от функции:

 function testMe ($a, $b, $factory) { $obj = $factory->getNewCalculationObject(); return $obj->calcIt ($a, $b); } 

Вы можете использовать обычную фабрику по умолчанию, чтобы сделать ее обратно совместимой с вашей текущей реализацией:

 function testMe ($a, $b, $factory = null) { if ($factory === null) { $factory = new CalculationObjectFactory(); } $obj = $factory->getNewCalculationObject(); return $obj->calcIt ($a, $b); } 

Если это выглядит немного неуклюжим для вас, подумайте о перемещении функции в класс.