是由Zend核心实现的,php的变量引用,函数引用,对象引用

  是由Zend核心实现的,php的变量引用,函数引用,对象引用
  在PHP 中引用的意思是:不同的名字访问同一个变量内容,
与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址

变量的引用

PHP 的引用允许你用两个变量来指向同一个内容

$a=”ABC”;
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b=”EFG”;
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG
?>

函数的传址调用
传址调用我就不多说了 下面直接给出代码

function test
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test; //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值就可以改变$b的值了
echo “
“;
echo $b;//输出101

要注意的是,在这里test;的话就会出错,原因自己去想

函数的引用返回
先看代码

function &test
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}

$a=test;//这条语句会输出$b的值为1
$a=5;
$a=test;//这条语句会输出$b的值为2

$a=&test;//这条语句会输出$b的值为3
$a=5;
$a=test;//这条语句会输出$b的值为6

下面解释下:
通过这种方式$a=test;得到的其实不是函数的引用返回,这跟普通的函数调用没有区别至于原因:这是PHP的规定
PHP规定通过$a=&test; 方式得到的才是函数的引用返回
至于什么是引用返回呢功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的,

通俗的讲
1:如果有下面的代码

$a=”A  BC”;
$b=$a;

其实此时$a与$b都是指向同一内存地址而并不是$a与$b占用不同的内存

2:如果在上面的代码基础上再加上如下代码

$a=”EFG”;

由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储。
  在PHP 中引用的意思是:不同的名字访问同一个变量内容.
与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址

变量的引用

PHP 的引用允许你用两个变量来指向同一个内容

$a=”ABC”;
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b=”EFG”;
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG
?>

函数的传址调用
传址调用我就不多说了 下面直接给出代码

function test
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test; //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值就可以改变$b的值了
echo “
“;
echo $b;//输出101

要注意的是,在这里test;的话就会出错,原因自己去想

函数的引用返回
先看代码

function &test
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}

$a=test;//这条语句会输出$b的值为1
$a=5;
$a=test;//这条语句会输出$b的值为2

$a=&test;//这条语句会输出$b的值为3
$a=5;
$a=test;//这条语句会输出$b的值为6

下面解释下:
通过这种方式$a=test;得到的其实不是函数的引用返回,这跟普通的函数调用没有区别至于原因:这是PHP的规定
PHP规定通过$a=&test; 方式得到的才是函数的引用返回
至于什么是引用返回呢功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。

通俗的讲
1:如果有下面的代码

$a=”A  BC”;
$b=$a;

其实此时$a与$b都是指向同一内存地址而并不是$a与$b占用不同的内存

2:如果在上面的代码基础上再加上如下代码

$a=”EFG”;

由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储
  在PHP 中引用的意思是:不同的名字访问同一个变量内容,
与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址

变量的引用

PHP 的引用允许你用两个变量来指向同一个内容

$a=”ABC”;
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b=”EFG”;
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG
?>

函数的传址调用
传址调用我就不多说了 下面直接给出代码

function test
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test; //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值就可以改变$b的值了
echo “
“;
echo $b;//输出101

要注意的是,在这里test;的话就会出错,原因自己去想

函数的引用返回
先看代码

function &test
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}

$a=test;//这条语句会输出$b的值为1
$a=5;
$a=test;//这条语句会输出$b的值为2

$a=&test;//这条语句会输出$b的值为3
$a=5;
$a=test;//这条语句会输出$b的值为6

下面解释下:
通过这种方式$a=test;得到的其实不是函数的引用返回,这跟普通的函数调用没有区别至于原因:这是PHP的规定
PHP规定通过$a=&test; 方式得到的才是函数的引用返回
至于什么是引用返回呢功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的,

通俗的讲
1:如果有下面的代码

$a=”A  BC”;
$b=$a;

其实此时$a与$b都是指向同一内存地址而并不是$a与$b占用不同的内存

2:如果在上面的代码基础上再加上如下代码

$a=”EFG”;

由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储,在PHP 中引用的意思是:不同的名字访问同一个变量内容,
与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址

变量的引用

PHP 的引用允许你用两个变量来指向同一个内容

$a=”ABC”;
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b=”EFG”;
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG
?>

函数的传址调用
传址调用我就不多说了 下面直接给出代码

function test
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test; //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值就可以改变$b的值了
echo “
“;
echo $b;//输出101

要注意的是,在这里test;的话就会出错,原因自己去想

函数的引用返回
先看代码

function &test
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}

$a=test;//这条语句会输出$b的值为1
$a=5;
$a=test;//这条语句会输出$b的值为2

$a=&test;//这条语句会输出$b的值为3
$a=5;
$a=test;//这条语句会输出$b的值为6

下面解释下:
通过这种方式$a=test;得到的其实不是函数的引用返回,这跟普通的函数调用没有区别至于原因:这  是PHP的规定
PHP规定通过$a=&test; 方式得到的才是函数的引用返回
至于什么是引用返回呢功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的,

通俗的讲
1:如果有下面的代码

$a=”ABC”;
$b=$a;

其实此时$a与$b都是指向同一内存地址而并不是$a与$b占用不同的内存

2:如果在上面的代码基础上再加上如下代码

$a=”EFG”;

由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储。

发表评论