Hi Jeff, Your examples 1-4 are bad. They snould use non-static methodos.
Example (5) make sense, but it is not exelent (I did the same :), because "A" MUST be child of Singleton and it must declare special property. BTW: generic singletons can be implemented with one very simple function function single_instance($class_name) { static $instances = array(); return (isset($instances[$class_name])) ? $instances[$class_name] : ($instances[$class_name] = new $class_name); } Thanks. Dmitry. > -----Original Message----- > From: Jeff Moore [mailto:[EMAIL PROTECTED] > Sent: Wednesday, March 01, 2006 11:45 PM > To: Dmitry Stogov > Cc: 'Mike Lively'; 'Andi Gutmans'; 'Marcus Boerger'; 'PHP-DEV' > Subject: Re: [PHP-DEV] [PATCH] Late Static Binding > > > > On Mar 1, 2006, at 9:37 AM, Dmitry Stogov wrote: > > > 1) I would very like to see some real example where "static" is > > necessary? > > Some use cases for late static binding, tested using self on 5.1.2: > > 1. What class am I really? > > class A { > static function myclass() { > return get_class(); > } > } > > class B extends A {} > > echo A::myclass(); // A > echo B::myclass(); // also A > > > 2. Template method pattern for static methods requires late binding: > > class Common { > static function doit() { > self::header(); > echo "The answer is 42"; > self::footer(); > } > // could be abstract > static function header() {} > static function footer() {} > } > > class Html extends Common { > static function header() { > echo "<html>\n<body><B>"; > } > static function footer() { > echo "</B></body>\n</html>"; > } > } > > echo html::doit(); // Sorry, no html > > > 3. Accessing a static property with late binding: > > class A { > static protected $statprop = 'A'; > static function getStatprop() { > return self::$statprop; > } > } > > class B extends A { > static protected $statprop = 'B'; > } > > echo A::getStatprop(); // A > echo B::getStatprop(); // Also A > > > 4. Static properties are hard to get at for anything other than the > explicit class name: > > class A { > static public $iprop = 'A'; > } > > $class = 'A'; > echo $class::$iprop; // syntax error, unexpected > T_PAAMAYIM_NEKUDOTAYIM > > > 5. A (non-working) singleton base class implementation combining > multiple late binding issues: > > class Singleton { > public $iprop = NULL; > static protected $instance; > > static public function getInstance() { > if (!isset(self::$instance)) { > $class = get_class(); > $obj = new $class(); > self::configure($obj); > self::$instance = $obj; > } > return self::$instance; > } > > static protected function configure($obj) { > } > } > > class A extends Singleton { > static protected $instance; > static protected function configure($obj) { > $obj = 'A'; > } > } > > var_dump(A::getInstance()->iprop); //NULL > > > This is an issue I would very much like to see resolved prior to 6. > > Regards, > > Jeff > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php