--TEST--
Pass uninitialised variables by reference and by value to test implicit initialisation.
--FILE--
<?php

function v($val) {
  $val = "Val changed";
}

function r(&$ref) {
  $ref = "Ref changed";
}


function vv($val1, $val2) {
  $val1 = "Val1 changed";
  $val2 = "Val2 changed";
}

function vr($val, &$ref) {
  $val = "Val changed";
  $ref = "Ref changed";
}

function rv(&$ref, $val) {
  $val = "Val changed";
  $ref = "Ref changed";
}

function rr(&$ref1, &$ref2) {
  $ref1 = "Ref1 changed";
  $ref2 = "Ref2 changed";
}


class C {

	function __construct($val, &$ref) {
	  $val = "Val changed";
	  $ref = "Ref changed";
	}

	function v($val) {
	  $val = "Val changed";
	}
	
	function r(&$ref) {
	  $ref = "Ref changed";
	}
	
	function vv($val1, $val2) {
	  $val1 = "Val1 changed";
	  $val2 = "Val2 changed";
	}
	
	function vr($val, &$ref) {
	  $val = "Val changed";
	  $ref = "Ref changed";
	}
	
	function rv(&$ref, $val) {
	  $val = "Val changed";
	  $ref = "Ref changed";
	}
	
	function rr(&$ref1, &$ref2) {
	  $ref1 = "Ref1 changed";
	  $ref2 = "Ref2 changed";
	}

} 

echo "\n ---- Pass by ref / pass by val: functions ----\n";
unset($u1, $u2);
v($u1);
r($u2);
var_dump($u1, $u2);

unset($u1, $u2);
vv($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
vr($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
rv($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
rr($u1, $u2);
var_dump($u1, $u2);


echo "\n\n ---- Pass by ref / pass by val: static method calls ----\n";
unset($u1, $u2);
C::v($u1);
C::r($u2);
var_dump($u1, $u2);

unset($u1, $u2);
C::vv($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
C::vr($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
C::rv($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
C::rr($u1, $u2);
var_dump($u1, $u2);

echo "\n\n ---- Pass by ref / pass by val: instance method calls ----\n";
unset($u1, $u2);
$c = new C($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
$c->v($u1);
$c->r($u2);
var_dump($u1, $u2);

unset($u1, $u2);
$c->vv($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
$c->vr($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
$c->rv($u1, $u2);
var_dump($u1, $u2);

unset($u1, $u2);
$c->rr($u1, $u2);
var_dump($u1, $u2);

?>
--EXPECTF--

 ---- Pass by ref / pass by val: functions ----

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u1 in %s on line %d
NULL
string(11) "Ref changed"

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u2 in %s on line %d

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u2 in %s on line %d
NULL
NULL

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u1 in %s on line %d
NULL
string(11) "Ref changed"

Notice: Undefined variable: u2 in %s on line %d

Notice: Undefined variable: u2 in %s on line %d
string(11) "Ref changed"
NULL
string(12) "Ref1 changed"
string(12) "Ref2 changed"


 ---- Pass by ref / pass by val: static method calls ----

Notice: Undefined variable: u1 in %s on line %d

Strict Standards: Non-static method C::v() should not be called statically in %s on line %d

Strict Standards: Non-static method C::r() should not be called statically in %s on line %d

Notice: Undefined variable: u1 in %s on line %d
NULL
string(11) "Ref changed"

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u2 in %s on line %d

Strict Standards: Non-static method C::vv() should not be called statically in %s on line %d

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u2 in %s on line %d
NULL
NULL

Notice: Undefined variable: u1 in %s on line %d

Strict Standards: Non-static method C::vr() should not be called statically in %s on line %d

Notice: Undefined variable: u1 in %s on line %d
NULL
string(11) "Ref changed"

Notice: Undefined variable: u2 in %s on line %d

Strict Standards: Non-static method C::rv() should not be called statically in %s on line %d

Notice: Undefined variable: u2 in %s on line %d
string(11) "Ref changed"
NULL

Strict Standards: Non-static method C::rr() should not be called statically in %s on line %d
string(12) "Ref1 changed"
string(12) "Ref2 changed"


 ---- Pass by ref / pass by val: instance method calls ----

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u1 in %s on line %d
NULL
string(11) "Ref changed"

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u1 in %s on line %d
NULL
string(11) "Ref changed"

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u2 in %s on line %d

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u2 in %s on line %d
NULL
NULL

Notice: Undefined variable: u1 in %s on line %d

Notice: Undefined variable: u1 in %s on line %d
NULL
string(11) "Ref changed"

Notice: Undefined variable: u2 in %s on line %d

Notice: Undefined variable: u2 in %s on line %d
string(11) "Ref changed"
NULL
string(12) "Ref1 changed"
string(12) "Ref2 changed"