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 */
?>

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to