Experiment: Pass by Reference in PHP, part 2

Code:


<?php

class testObj {
  private 
$flag=FALSE;

  public function 
set_flag() {
    
$this->flag TRUE;
  }

  public function 
get_flag() {
    return 
$this->flag;
  }
}

function 
test_container() {
  static 
$_test_obj;
  if (!isset(
$_test_obj)) $_test_obj = new testObj();
  return array(&
$_test_obj);
}


$array test_container();
$test_obj_1 $array[0];
$array test_container();
$test_obj_2 $array[0];

print 
sprintf("<li>object 1, before set flag: %s</li>\n",
  
var_export($test_obj_1->get_flag(), TRUE));
print 
sprintf("<li>object 2, before set flag: %s</li>\n",
  
var_export($test_obj_2->get_flag(), TRUE));

$test_obj_1->set_flag();

print 
sprintf("<li>object 1, after set flag: %s</li>\n",
  
var_export($test_obj_1->get_flag(), TRUE));
print 
sprintf("<li>object 2, after set flag: %s</li>\n",
  
var_export($test_obj_2->get_flag(), TRUE));
?>

Result:

  • object 1, before set flag: false
  • object 2, before set flag: false
  • object 1, after set flag: true
  • object 2, after set flag: true