|
Posted by Hendri Kurniawan on 01/08/07 13:19
comp.lang.php wrote:
> [PHP]
> <?
> class EditResultGenerator extends MethodGeneratorForActionPerformer {
>
> /**
> * Create an instance of itself if $this does not yet exist as an
> EditResultGenerator class object
> *
> * @access private
> * @see is_class
> */
> function &generateSelf() { // STATIC VOID METHOD
> if (!is_object($this) || @!is_class($this, 'EditResultGenerator')) {
> $this->self =& new EditResultGenerator();
> } else {
> $this->self =& $this;
> }
> }
>
> }
> ?>
> [/PHP]
>
> This self-generating function serves a purpose to ensure that if part
> of the application does this:
>
> [PHP]
> <?
> EditResultGenerator::getResult();
> ?>
> [/PHP]
>
> That it will work *exactly* the same as if I did this:
>
> [PHP]
> <?
> $edit =& new EditResultGenerator();
> $result = $edit->getResult();
> ?>
> [/PHP]
>
> However, I cannot change hundreds of lines of code from the former to
> the latter just to ensure instantiation is uniform, so I'm stuck with
> the fact that I have to generate a $this->self EditResultGenerator
> class object if $this does not exist, otherwise, $this->self must be
> *absolutely identical* to $this, in fact, be a reference!
>
> This works beautifully in PHP 4.3+, but bombs in PHP 5.2.
>
> How can I get it to work in PHP 5.2+?
>
> Phil
>
Singleton... I like... :)
<?php
function & generateSelf() {
static $self = null;
if(is_null($self)) $self = new EditResultGenerator();
return $self;
}
?>
Hendri Kurniawan
Navigation:
[Reply to this message]
|