new overloading feature?
| From: | Derrell dot Lipman at UnwiredUniverse dot com | Date: | Fri, 05 Nov 2004 15:55:51 +0000 |
| Subject: | new overloading feature? | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-13731@lists.php.net to get a copy of this message | ||
I came across an interesting desire today. I'd like to create a new class
instance if an only if a "key" value does not already exist. This key value
could be looked up in a database, in an array, etc.
The following contrived example shows use of a proposed __new() overload
function which would be called BEFORE the constructor, and could chose to
return a newly constructed object (by calling __construct()) or to return an
already existing object.
One could certainly call a function which searched for the key value and only
instantiated a new object if the existing one was not found, but this seems
cleaner.
Thoughts?
<?php
class X
{
static $allX = array();
var $val;
function __construct($val)
{
$this->val = $val;
X::$allX[] =& $this;
}
function __new($val)
{
foreach (X::$allX as $x)
{
if ($x->val == $val)
{
return $x;
}
}
return __construct($val);
}
}
$try1 = new X(23); /* would return $allX[0] reference */
$try2 = new X(42); /* woudl return $allX[1] reference */
$try3 = new X(23); /* would return $allX[0] reference */
?>