Re: RE: [PHP-DEV] Re: [PHP-QA] $obj = new foo() patch
| From: | Andi Gutmans | Date: | Sat, 11 Nov 2000 17:23:39 +0000 |
| Subject: | Re: RE: [PHP-DEV] Re: [PHP-QA] $obj = new foo() patch | ||
| References: | 1 | Groups: | php.dev php.qa |
| Request: | Send a blank email to php-dev+get-37754@lists.php.net to get a copy of this message | ||
I will address the OO issues once I get through all of the mail.
Just a side note, global $a won't be changing it's behavior. At least not until a new major PHP version. It would really break stuff now and in any case, it's consistent with how the =& works. The fact that references aren't pointers can be confusing but this is how it works.
Andi
At 01:01 PM 11/11/00 +0300, Kirill Maximov wrote:
Hi again, Mike Heath wrote:--- Andi Gutmans <andi@zend.com> http://www.zend.com/If we want to force 'rich' OO design, let's wait until PHP 5.0. IMO, a few peoply will upgrade to 4.0.4 if they'll have to rewrite their code (possibly, a LOT of code). But, I think, core team understands importance of compatibility issue.That'swhy Andi reversed the patch for now, isn't it? ;-)Well I have to agree with you there. There are a lot of OO features I would love to see in PHP but I'm certainly not counting on them until future versions. The problem (regarding Andi's patch) is that the expected behavior of: <?php class foo {function foo($a) { global $ListOfObjects;$this->a = a; $ListOfObjects[] = &$this; }$bar = new foo() ?> would be that $ListOfObjects[0] and $bar referenced the same data. They do not. This is very frustrating to many people are there are 5 or more bugs in the bugs database pointing this out. I'm convinced this is a serious issue and needs to be fixed. I can only pray that *some* fix will get into PHP 4.0.4. Well, the only solution I can imagine in this case is to change the way how 'global' directive works. As far as I've understood, for now, if I declare variable as global, I just make it a reference to an element of $GLOBALS array (something like this: $a = &$GLOBALS['a']). Or something similar. So any code that assigns $a = &{something} will just change the local $a. So, the following code prints 5, not 6. function tt() {global $a; $a = 5; $b = 6; $a = &$b;} tt(); echo $a; I'm afraid, I suppose it to be a bug, though I've never used references explicitly so far (most of my code is for PHP3). I think, 'global' shouldn't be implemented as references to $GLOBALS. And in this case, Andi's patch will work smoothly. (BTW -- regarding my explanation above concerning the difference between global $foo and $GLOBALS['foo']. This example will still work since I'm not changing the reference to $ListOfObjects just its array members.) Its clear ;) Regards, Mike With best regards, KIR