Re: PHP5 Static Object Function Issue
| From: | Jochem Maas | Date: | Wed, 02 Mar 2005 02:10:30 +0000 |
| Subject: | Re: PHP5 Static Object Function Issue | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-209767@lists.php.net to get a copy of this message | ||
Gavin Roy wrote:
I believe there is small problem in PHP5 with regard to static functions in uninstanced classes. From discussions in various php irc channels and what I've read about it in the docs, I can not call a static function in an uninstanced class via a variable. For example: $class = "MyClass"; $instance = new $class(); works, but $class = "MyClass"; $instance = $class::getInstance();$func = array($class,'getInstance'); if (is_callable($func)) { $instance = call_user_func($func); } ---- if the class is only used in the singleton context then why not only expose static public methods - let the class deal with the instance internally: class Test { protected function __construct() {} protected static function getInstance() { /* do stuff then... */ return $instance; } protected function _foo() { echo "say aaaarrrhhh.\n"; } static public function foo() { $x = self::getInstance(); $x->_foo(); } } Test::foo(); $func = array('Test','foo'); if (is_callable($func)) { $rtnVal = call_user_func($func); } see also http://php.net/call_user_func_array
doesnt, where $instance = MyClass::getInstance(); does. I know that some people might consider it poor design, but basically I'm trying to dynamically reference singleton patterned classes using getInstance to internally create an object instance and use that instance for all processing. As of right now it doesn't seem that it is possible. Is there a reason why it's not supported? Will it be supported in the future? Gavin