# Null Object

## Purpose

NullOutput is a example of NullObject pattern. It is not formally a Design Pattern by the GoF but it's a schema which appears frequently enough to
be a pattern. Furthermore 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

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
a statement like `if (!is_null($obj)) { $obj->callSomething(); }` anymore.

## Examples

* Symfony2: null logger of profiler
* Symfony2: null output in Symfony/Console
* null handler in a Chain of Responsibilities pattern
* null command in a Command pattern

## UML Diagram

![Alt NullObject UML Diagram](uml/uml.png)
# Null Object

## Purpose

NullObject is not a GoF design pattern but a schema which appears frequently enough to be considered a pattern. It has the following benefits:

* Client code is simplified
* Reduces the chance of null pointer exceptions
* Fewer conditionals require less test cases

Methods that return an object or null should instead return an object or `NullObject`. `NullObject`s simplify boilerplate code such as `if (!is_null($obj)) { $obj->callSomething(); }` to just `$obj->callSomething();` by eliminating the conditional check in client code.

## Examples

* Symfony2: null logger of profiler
* Symfony2: null output in Symfony/Console
* null handler in a Chain of Responsibilities pattern
* null command in a Command pattern

## UML Diagram

![Alt NullObject UML Diagram](uml/uml.png)

Copy edit for NullObject readme
Copy edit for NullObject readme