<?php /* * DesignPatternPHP */ namespace DesignPatterns\NullObject; /** * NullOutput is a example of NullObject pattern. It is not formely a Design * Pattern by the GoF but it's a schema which appears frequently enough to * be a pattern. Futhermore it is a really good pattern in my opinion : * - the code in the client is simple * - it reduces the chance of null pointer exception * - less "if" => less test cases * * The purpose : every time you have a method which returns an object or null, * you should return an object or a "NullObject". With NullObject, you don't need * statement like "if (!is_null($obj)) { $obj->callSomething(); }" anymore. * * In this case, this a logger which does nothing. Other examples : * - null logger of symfony profiler * - null output in symfony/console * - null handler in a Chain of Responsiblities pattern * - null command in a Command pattern * * Performance concerns : ok there is a call for nothing but we spare an "if is_null" * I didn't run a benchmark but I think it's equivalent. * * Key feature : of course this logger MUST implement the same interface (or abstract) * like the other loggers. */ class NullLogger implements LoggerInterface { public function log($str) { // do nothing } }