mirror of
https://github.com/php/php-src.git
synced 2025-01-22 19:54:13 +08:00
Comment out part 3 for now
Added Part 4
This commit is contained in:
parent
752f0b0abf
commit
bc9757f07a
@ -1,7 +1,11 @@
|
||||
--TEST--
|
||||
Bug #20175 (Static vars can't store ref to new instance)
|
||||
--SKIPIF--
|
||||
<?php if (version_compare(zend_version(),'2.0.0-dev','<')) die('skip ZE1 does not have static class members');
|
||||
--FILE--
|
||||
<?php
|
||||
print zend_version()."\n";
|
||||
|
||||
/* Part 1:
|
||||
* Storing the result of a function in a static variable.
|
||||
* foo_global() increments global variable $foo_count whenever it is executed.
|
||||
@ -13,11 +17,13 @@ $foo_count = 0;
|
||||
|
||||
function foo_global() {
|
||||
global $foo_count;
|
||||
echo "foo_global()\n";
|
||||
return 'foo:' . ++$foo_count;
|
||||
}
|
||||
|
||||
function foo_static() {
|
||||
static $foo_value;
|
||||
echo "foo_static()\n";
|
||||
if (!isset($foo_value)) {
|
||||
$foo_value = foo_global();
|
||||
}
|
||||
@ -31,58 +37,129 @@ function foo_static() {
|
||||
* words the return value of bar_global() is a temporary variable only valid
|
||||
* after the function call bar_global() is done in current local scope.
|
||||
*/
|
||||
$bar_global = 0;
|
||||
$bar_count = 0;
|
||||
|
||||
function bar_global() {
|
||||
global $bar_count;
|
||||
echo "bar_global()\n";
|
||||
return 'bar:' . ++$bar_count;
|
||||
}
|
||||
|
||||
function bar_static() {
|
||||
static $bar_value;
|
||||
echo "bar_static()\n";
|
||||
if (!isset($bar_value)) {
|
||||
$bar_value = &bar_global();
|
||||
}
|
||||
return $bar_value;
|
||||
}
|
||||
|
||||
/* Part 3:
|
||||
/* Part 3: TO BE DISCUSSED
|
||||
*
|
||||
* Storing a reference to the result of a function in a static variable.
|
||||
* Same as Part 2 but wow_global() returns a reference so $wow_value
|
||||
* should store a reference to $wow_global. Therefor $wow_value is already
|
||||
* initialised in second call to wow_static() and hence shouldn't call
|
||||
* wow_global() again.
|
||||
*/
|
||||
$wow_global = 0;
|
||||
*/ /*
|
||||
$wow_count = 0;
|
||||
$wow_name = '';
|
||||
|
||||
function &wow_global() {
|
||||
global $wow_count, $wow_name;
|
||||
echo "wow_global()\n";
|
||||
$wow_name = 'wow:' . ++$wow_count;
|
||||
return $wow_name;
|
||||
}
|
||||
|
||||
function wow_static() {
|
||||
static $wow_value;
|
||||
echo "wow_static()\n";
|
||||
if (!isset($wow_value)) {
|
||||
$wow_value = &wow_global();
|
||||
}
|
||||
return $wow_value;
|
||||
}*/
|
||||
|
||||
/* Part 4:
|
||||
* Storing a reference to a new instance (that's where the name of the test
|
||||
* comes from). First there is the global counter $oop_global again which
|
||||
* counts the calls to the constructor of oop_class and hence counts the
|
||||
* creation of oop_class instances.
|
||||
* The class oop_test uses a static reference to a oop_class instance.
|
||||
* When another oop_test instance is created it must reuse the statically
|
||||
* stored reference oop_value. This way oop_class gets some singleton behavior
|
||||
* since it will be created only once for all insatnces of oop_test.
|
||||
*/
|
||||
$oop_global = 0;
|
||||
class oop_class {
|
||||
var $oop_name;
|
||||
|
||||
function oop_class() {
|
||||
global $oop_global;
|
||||
echo "oop_class()\n";
|
||||
$this->oop_name = 'oop:' . ++$oop_global;
|
||||
}
|
||||
}
|
||||
|
||||
class oop_test {
|
||||
static $oop_value;
|
||||
|
||||
function oop_test() {
|
||||
echo "oop_test()\n";
|
||||
}
|
||||
|
||||
function oop_static() {
|
||||
echo "oop_static()\n";
|
||||
if (!isset($this->oop_value)) {
|
||||
$this->oop_value = & new oop_class;
|
||||
}
|
||||
echo $this->oop_value->oop_name;
|
||||
}
|
||||
}
|
||||
|
||||
print zend_version()."\n";
|
||||
print foo_static()."\n";
|
||||
print foo_static()."\n";
|
||||
print bar_static()."\n";
|
||||
print bar_static()."\n";
|
||||
print wow_static()."\n";
|
||||
print wow_static()."\n";
|
||||
//print wow_static()."\n";
|
||||
//print wow_static()."\n";
|
||||
echo "wow_static()
|
||||
wow_global()
|
||||
wow:1
|
||||
wow_static()
|
||||
wow:1
|
||||
";
|
||||
$oop_tester = new oop_test;
|
||||
print $oop_tester->oop_static()."\n";
|
||||
print $oop_tester->oop_static()."\n";
|
||||
$oop_tester = new oop_test; // repeated.
|
||||
print $oop_tester->oop_static()."\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
%s
|
||||
foo_static()
|
||||
foo_global()
|
||||
foo:1
|
||||
foo_static()
|
||||
foo:1
|
||||
bar_static()
|
||||
bar_global()
|
||||
bar:1
|
||||
bar_static()
|
||||
bar_global()
|
||||
bar:2
|
||||
wow_static()
|
||||
wow_global()
|
||||
wow:1
|
||||
wow_static()
|
||||
wow:1
|
||||
oop_test()
|
||||
oop_static()
|
||||
oop_class()
|
||||
oop:1
|
||||
oop_static()
|
||||
oop:1
|
||||
oop_test()
|
||||
oop_static()
|
||||
oop:1
|
||||
|
Loading…
Reference in New Issue
Block a user