Edit report at https://bugs.php.net/bug.php?id=53666&edit=1

 ID:                 53666
 Comment by:         normandiggs at gmail dot com
 Reported by:        crystal at cyclonephp dot com
 Summary:            local static variables in methods tied to the object
                     instance
 Status:             Open
 Type:               Feature/Change Request
 Package:            Scripting Engine problem
 Operating System:   linux
 PHP Version:        5.3.4
 Block user comment: N
 Private report:     N

 New Comment:

Please, fix it. It's very weird behavior.
Another one example: http://codepad.viper-7.com/jKkwzF


Previous Comments:
------------------------------------------------------------------------
[2011-01-07 22:13:04] crystal at cyclonephp dot com

Because this way local static variables can't be used eg. for caching method 
return values. I think it's a very important use case. I also don't think that 
it 
would cause severe bc issues.

------------------------------------------------------------------------
[2011-01-07 21:52:18] cataphr...@php.net

Why? At most this is a (bc breaking) feature request. Function static variables 
have always been tied only with the function itself.

------------------------------------------------------------------------
[2011-01-06 12:40:16] crystal at cyclonephp dot com

Description:
------------
The inital value of a static variable in a non-static method should take care 
about the current instance. The initialization should be done when a method of 
the instance is called, and not only when the method is first called in the 
script. The local static variable should be interpreted as an object variable 
that is visible only in the declaring method.

Test script:
---------------
<?php

class StatTest {
        
        function statvartest() {
                static $var = 'initial';
                echo $var."\n";
                if ($var == 'initial') {
                        $var = 'changed';
                }
        }
}

$testA = new StatTest;
$testA->statvartest();
$testA->statvartest();

$testB = new StatTest;
$testB->statvartest();
$testB->statvartest();



Expected result:
----------------
initial
changed
initial
changed


Actual result:
--------------
initial
changed
changed
changed



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=53666&edit=1

Reply via email to