के बीच साझा किया गया है, उदाहरण के दौरान ऑब्जेक्ट विधियों के अंदर परिभाषित स्थैतिक चर के साथ कुछ अनपेक्षित व्यवहार में आया है। यह शायद ज्ञात व्यवहार है, लेकिन जैसा कि मैं PHP दस्तावेज़ ब्राउज़ करता हूं, मुझे ऑब्जेक्ट विधियों के भीतर स्थैतिक रूप से परिभाषित चर के उदाहरण नहीं मिल सकते हैं। ,गैर-स्थैतिक विधि के भीतर स्थिर उदाहरण
<?php
class Foo {
public function dofoo() {
static $i = 0;
echo $i++ . '<br>';
}
}
$f = new Foo;
$g = new Foo;
$f->dofoo(); // expected 0, got 0
$f->dofoo(); // expected 1, got 1
$f->dofoo(); // expected 2, got 2
$g->dofoo(); // expected 0, got 3
$g->dofoo(); // expected 1, got 4
$g->dofoo(); // expected 2, got 5
अब मैं $i
की उम्मीद है स्थिर उदाहरण प्रति होने के लिए होता है, लेकिन वास्तविकता में $i
उदाहरणों के बीच साझा किया जाता है:
यहाँ व्यवहार की कमी मैं का सामना करना पड़ा है। अपने स्वयं के संपादन के लिए, क्या कोई इस बात का विस्तार कर सकता है कि यह मामला क्यों है, और जहां इसे php.net पर दस्तावेज किया गया है?
वह दस्तावेज स्थैतिक वर्ग गुणों और विधियों के लिए है, एक विधि के भीतर स्थिर चर नहीं। –
एडम: PHP5 में वे एक हैं और वही हैं। स्टेटिक स्थिर है। – hobodave
मेरे दिमाग में, '$ f-> dofoo()' 'g g>> dofoo()' के समान विधि नहीं है। स्पष्ट है कि PHP डेवलपर्स एक ही दिमाग से नहीं हैं। :) –