Find file History
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
Tests Update LoggerTest.php Mar 23, 2017
uml Added Behavioral pattern UMLs Jul 31, 2014
LoggerInterface.php PHP7 NullObject Sep 22, 2016
NullLogger.php PHP7 NullObject Sep 22, 2016
PrintLogger.php PHP7 NullObject Sep 22, 2016
README.rst Improve grammar: these code > this code Apr 4, 2017
Service.php PHP7 NullObject Sep 22, 2016

README.rst

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. NullObjects 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

Code

You can also find this code on GitHub

Service.php

.. literalinclude:: Service.php
   :language: php
   :linenos:

LoggerInterface.php

.. literalinclude:: LoggerInterface.php
   :language: php
   :linenos:

PrintLogger.php

.. literalinclude:: PrintLogger.php
   :language: php
   :linenos:

NullLogger.php

.. literalinclude:: NullLogger.php
   :language: php
   :linenos:

Test

Tests/LoggerTest.php

.. literalinclude:: Tests/LoggerTest.php
   :language: php
   :linenos: