RE: [PHP] Fatal error: Cannot re-assign $this -- any plans to "fix" this limitation?
| From: | Daevid Vincent | Date: | Tue, 14 Jan 2014 19:26:44 +0000 |
| Subject: | RE: [PHP] Fatal error: Cannot re-assign $this -- any plans to "fix" this limitation? | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-322697@lists.php.net to get a copy of this message | ||
> -----Original Message-----
> From: Aziz Saleh [mailto:azizsaleh@gmail.com]
> Sent: Monday, January 13, 2014 3:18 PM
> To: Daevid Vincent
> Cc: php-general@lists.php.net
> Subject: Re: [PHP] Fatal error: Cannot re-assign $this -- any plans to "fix"
> this limitation?
>
> On Mon, Jan 13, 2014 at 5:53 PM, Daevid Vincent <daevid@daevid.com> wrote:
>
> > Are there any plans to fix this "bug" (or add this as a feature depending
> > on
> > your POV)
> >
> > I have a connection class that uses singletons for each database. We have
> > replication on our PROD boxes but on our VMs we don't, so the code does a
> > little magic to determine if it's an INSERT|UPDATE|DELETE|REPLACE and
> tries
> > to change to the proper mysql connection (write to master, read from
> slaves
> > in the case of PROD and just use the same DB on the VM).
> >
> > The problem, and it's quite frustrating considering it doesn't make a lot
> > of
> > logical sense why you couldn't do it, is that PHP doesn't allow the
> > re-assignment of $this. :-\
> >
> > Both of these fail (of course)
> >
> > $this = Connection::get_instance(self::_determine_RDBMS($mybase[1],
> true));
> >
> > $this = self::$_instance_array[$this->_base];
> >
> > It seems that it should be code-wise do-able by simply having the guts of
> > PHP (the C/C++ code PHP is created with) create a new object - just as it
> > did when creating $this, then just change the pointer that $this is
> looking
> > at to the new object, throw the old object onto the heap for cleanup. Why
> > is
> > that so difficult?
> >
> >
> > I don't think so. You can always double check here:
>
> https://bugs.php.net/search.php (Type: Feature/Change Request).
>
> As to be able to dynamically change $this (which in PHP is a reference to
> the calling object), I personally do not think it is a good idea.
> Particularly if more than one person is working on the file/project - you
> expect $this to be something, have specific methods, but ends up being a
> different object.
I don’t need it to change to an entirely different object class, just a different instance of the
same class. I agree that changing $this within itself to something completely foreign would be
horrible. But changing to a new/different version of the same thing (same methods, etc.) seems
logical and as illustrated useful.