|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-03-24 11:28 UTC] flying at dom dot natm dot ru
Static variables inside member functions of a classes have wrong scope. They should belong to each instance of a class, like normal class properties, but they're belong to class definition instead and, therefore, shared between every instance of this class. It makes static variables unusable into class member variables.
Here is an example:
// Define class
class A
{
var $id = null;
function A($id)
{
$this->id = $id;
}
function func()
{
// Here we have counter into static variable
static $cnt;
if (!$cnt)
$cnt = 0;
// Show counter value and ID of a class instance
echo $this->id.": ".($cnt++)."\n";
}
};
// Create 2 instances of our class with different IDs
$a = new A('A');
$b = new A('B');
// Call method of each class instance twice and see,
// what will happen
$a->func();
$b->func();
$a->func();
$b->func();
Expected results:
-----------------
A: 0
B: 0
A: 1
B: 1
Actual results:
---------------
A: 0
B: 1
A: 2
B: 3
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 17:00:01 2025 UTC |
Hmm... this _is_ a bug. Two instances should have anything common. class A{ function ble(){ global $x; static $r=0; print($r++.'<br>'); $x->ble(); } } $x=new A(); $y=new A(); $y->ble(); And we're down... If it's not a bug than what is this? Proper behaviour?