aidan Fri Oct 29 07:28:28 2004 EDT Added files: /phpdoc/en/language/oop5 patterns.xml Log: Added patterns section
http://cvs.php.net/co.php/phpdoc/en/language/oop5/patterns.xml?r=1.1&p=1 Index: phpdoc/en/language/oop5/patterns.xml +++ phpdoc/en/language/oop5/patterns.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <sect1 id="language.oop5.patterns"> <title>Patterns</title> <para> Patterns are ways to describe best practices and good designs. They show a flexible solution to common programming problems. </para> <sect2> <title>Factory</title> <para> The Factory pattern allows for the instantation of objects at runtime. It is called a Factory Pattern since it is responsible for "manufacturing" an object. </para> <example> <title>Factory Method</title> <programlisting role="php"> <![CDATA[ <?php class DB { // ... Other methods // The Factory Method function &factory($type) { if (include_once 'Drivers/' . $type . '.php') { $classname = 'Driver_' . $type; return new $classname; } else { throw new Exception ('Driver not found'); } } } ?> ]]> </programlisting> <para> Defining this method in a class allows drivers to be loaded on the fly. Loading a <literal>MySQL</literal> and a <literal>SQLite</literal> driver could be done as follows: </para> <programlisting role="php"> <![CDATA[ <?php // Load a MySQL Driver $db_mysql = DB::factory('MySQL'); // Load a SQLite Driver $db_sqlite = DB::factory('SQLite'); ?> ]]> </programlisting> </example> </sect2> <sect2> <title>Singleton</title> <para> The Singleton pattern applies to situations in which there needs to be a single instance of a class. The most common example of this is a database connection. Implementing this pattern allows a programmer to make this single instance easily accessible by many other objects. </para> <example> <title>Singleton Function</title> <programlisting role="php"> <![CDATA[ <?php function &singleton($class) { // Declare a static variable to hold the object instance static $instance; // If the instance is not there create one if (!isset($instance)) { $instance = new $class; } return($instance); } ?> ]]> </programlisting> <para> This allows a single instance of any class to be retrieved. Loading an example <literal>DB</literal> could be done like so: </para> <programlisting role="php"> <![CDATA[ <?php $db = singleton('DB'); ?> ]]> </programlisting> </example> </sect2> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->