PHP 中的内存引址&

转自:http://www.xiukun.me/php-%E4%B8%AD%E7%9A%84%E5%86%85%E5%AD%98%E5%BC%95%E5%9D%80/

 

在PHP一般有函数引址和变量引址
变量引址

 

$var = 998;
$c = &$var;  // 变量$c引用了$var的内存地址. 这时变量$c和变量$var使用的就是同一个内存地址. 他们值会一起变
$c = 100;   // 当我改变了变量$c的值以后$var也会跟着变
var_dump($var);
 
//返回结果
100

 类引址

 

函数地址引用可以改变函数的返回值. 适用于跨函数的值保存.

 

class ref {
  public $var = 100;
  function &getvar() {
    return $this->var;
  }
}
 
$demo = new ref();
$var = &$demo->getvar();
$var = 300; // 改变函数的返回值.
echo $demo->getvar();
 
//结果
300

 函数引址

 

 

/**
 * 根据$key保存或读取数据.
 *
 * @staticvar mixed $static
 * @param mixed $key
 * @return mixed
 */
function &save_data($key) {
  static $static;
  if(!isset($static[$key])) {
    $static[$key] = '';
  }
  return $static[$key];
}
 
// 创建一个夸函数的数组.
function save1() {
  $save_data = &save_data('mydata');
  $save_data['php'] = 'hello, world';
}
function save2() {
  $save_data = &save_data('mydata');
  $save_data['shell'] = 'echo hello world';
}
 
// 以下创建一个对象,每一个函数保存一部分数据.
function saveobj1() {
  $save_data = &save_data('myobj');
  $save_data = new stdClass();
  $save_data->username = 'hello';
  $save_data->age = 22;
  $save_data->sex = '男';
}
function saveobj2() {
  $save_data = &save_data('myobj');
  $save_data->height = 180;
  $save_data->weight = '55KG';
}
 
save1();
save2();
saveobj1();
saveobj2();
 
// 读取出全部保存的数据,并输出.
$data = &save_data('mydata');
var_dump($data);
$obj = &save_data('myobj');
var_dump($obj);

 输出结果:

 

array (size=2)
  'php' => string 'hello, world' (length=12)
  'shell' => string 'echo hello world' (length=16)
object(stdClass)[1]
  public 'username' => string 'hello' (length=5)
  public 'age' => int 22
  public 'sex' => string '男' (length=3)
  public 'height' => int 180
  public 'weight' => string '55KG' (length=4)

 

你可能感兴趣的:(PHP)