Re: Fatal error: Cannot re-assign $this -- any plans to "fix" this limitation?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This seems like a problem that would more easily be solved by reorganizing
your code. I'm not an expert, and you only posted a small snippet of
code, so please take what I say with the appropriate measure of salt.

That being said, I can't possibly imagine a case where reassigning $this
would do anything but horribly confuse the implementation of your code. You
mentioned singletons, I would assume Connection::get_instance() would
return the same connection object for each connection type, not try to
modify itself to take on the properties of the requested connection type.
Does that make any sense? Maybe I would understand better if you could post
a more complete snippet of relevant code.


On Tue, Jan 14, 2014 at 11:26 AM, Daevid Vincent <daevid@xxxxxxxxxx> wrote:

>
>
> > -----Original Message-----
> > From: Aziz Saleh [mailto:azizsaleh@xxxxxxxxx]
> > Sent: Monday, January 13, 2014 3:18 PM
> > To: Daevid Vincent
> > Cc: php-general@xxxxxxxxxxxxx
> > Subject: Re:  Fatal error: Cannot re-assign $this -- any plans to
> "fix"
> > this limitation?
> >
> > On Mon, Jan 13, 2014 at 5:53 PM, Daevid Vincent <daevid@xxxxxxxxxx>
> 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.
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
>From the desk of Dan Munro

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux