php中函数前加&符号的作用分解

php变量前面加&符号是什么意思就不用多说了,大家都在用,就是两个变量同时指向一个地址而已,那么,php函数前面加&符号的意义又是什么呢?下面先上两个演示代码,然后再做解释。

function &chhua()
{
static $b="www.jb51.net";//申明一个静态变量
$b=$b."WEB开发";
echo $b;
return $b;
} 

$a=chhua();//这条语句会输出 $b的值 为“www.jb51.netWEB开发”
$a="PHP";
echo "<Br>";
$a=chhua();//这条语 句会输出 $b的值 为“www.jb51.netWEB开发WEB开发”
echo "<Br>";
$a=&chhua();//这条语句会输出 $b的值 为“www.jb51.netWEB开发WEB开发WEB开发”
echo "<Br>";
$a="JS";
$a=chhua(); //这条语句会输出 $b的值 为"JSWEB开发"

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(); 方式得到的才是函数的引用返回.

至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。)

用上面的例子来解释就是
$a=test()方式调用函数,只是将函数的值赋给$a而已, 而$a做任何改 变 都不会影响到函数中的$b.
而通过$a=&test()方式调用函数呢, 他的作用是将return $b中的 $b变量的内存地址与$a变量的内存地址,
指向了同一个地方. 即产生了相当于这样的效果($a=&b;) 所以改变$a的值,也同时改变了$b 的值 ,所以在执行了:
$a=&test(); $a=5; 以后,$b的值变为了5。

(0)

相关推荐

  • PHP源码分析之变量的存储过程分解

    PHP代码如下: 复制代码 代码如下: $php_var = 1; 对应C的代码是: 复制代码 代码如下: zval* c_var;    //定义PHP变量指针  MAKE_STD_ZVAL(c_var);  //初始化PHP变量  ZVAL_LONG(c_var,1) ;//赋值  ZEND_SET_SYMBL( EG(active_symbol_table), " php_var ", c_var);//注册到全局变量符号表 一.首先看第一行: zval* c_var;//申明一

  • PHP 字符串分割和比较

    或者使用strcmp来判断,但是这个能够告诉你两个字符串是否相等,但是无法告诉你在那里不同. 我的思路是单字符串分割为一个个字母(character),这样比较就能精确知道在那个位置不同了. 分隔字符串,使用"str_split"就可以了,语法参考[2].然后输出结果数组,好处是连空格也会作为数组的元素.我之前的例子就是因为前一个字符串包含2个空格,而后一个只有一个.但是输出的时候看到的显示都是一样的. 也可以按照其他分隔符进行分割,如"explode"或者&quo

  • PHP将字符分解为多个字符串的方法

    本文实例讲述了PHP将字符分解为多个子串的方法.分享给大家供大家参考.具体实现方法如下: 分解字符串主要通过Split()函数实现,该函数用于指把一个字符串通过指定的字符分解为多个子串,并分别存入数组中.其语法声明如下: array split(string pattern,string str[,int limit]); 其中的参数: pattern:用于指定作为分解标识的符号,注意该参数区分大小写. str:欲处理的字符串. limit:返回分解子串个数的最大值,缺省时为全部返回. 示例如下

  • php字符串分割函数explode的实例代码

    array explode (string $separator, string $string [, int $limit]) 该函数有3个参数,第一个参数$separator设置一个分割字符(串).第二个参数$string指定所要操作的字符串.$limit参数是可选的,指定最多将字符串分割为多少个子串.该函数返回一个由被分割的子串组成的数组. 来看下面的例子,对一个由逗号分隔的多行文本数据进行分析.例1,分割字符串. 复制代码 代码如下: <?php$this_year = 2013;$te

  • 一个图片地址分解程序(用于PHP小偷程序)

    如题,返回一个数组,可以获得图片地址的base url,相对地址,名称等,具体见下例: <? error_reporting(E_ALL ^ E_NOTICE); $imgurl='http://files.jb51.net/file_images/article/201408/201408232212306.png'; $imgurl_dir='/img/2014/07/02/14520384.gif'; //echo getimg($imgurl,'./img'); var_dump(url

  • php中利用explode函数分割字符串到数组

    分割字符串 //利用 explode 函数分割字符串到数组 复制代码 代码如下: <?php $source = "hello1,hello2,hello3,hello4,hello5";//按逗号分离字符串 $hello = explode(',',$source); for($index=0;$index<count($hello);$index++) { echo $hello[$index];echo "</br>"; } ?>

  • php下关于中英数字混排的字符串分割问题

    在网上找了一点时间,发现都不怎样. 后来就自己想了个办法,算是原创吧. 只是用截取加替换的功能. 复制代码 代码如下: function smssubstr($string, $length) { if(strlen($string) <= $length) { return $string; } $strcut = ''; for($i = 0; $i < $length; $i++) { $strcut .= ord($string[$i]) > 127 ? $string[$i].

  • php+正则将字符串中的字母数字和中文分割

    如:$str="php如何将字 符串中322的字母数字sf f45d和中文_分割?";按数字或字母分割. 复制代码 代码如下: $str = "php如何将字 符串中322的字母数字Asf f45d和中文_分割?";$arr = preg_split("/([a-zA-Z0-9]+)/", $str, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);  print_r($arr); 结果 复制

  • php通过数组实现多条件查询实现方法(字符串分割)

    复制代码 代码如下: <?php $keyword="asp php,jsp"; $keyword=str_replace(" "," ",$keyword); $keyword=str_replace(" ",",",$keyword); $keyarr=explode(',',$keyword); for($index=0;$index<count($keyarr);$index++) {

  • PHP易混淆函数的区别及用法汇总

    本文实例分析了PHP易混淆函数的区别及用法.分享给大家供大家参考.具体分析如下: 1.echo和print的区别 PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.echo输出后没有返回值,但print有返回值,当其执行失败时返回flase.因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1. PHP代码: 复制代码 代码如下: $r = print "Hello World"; 这意味着print可用在一些复杂的表达式中,而echo

随机推荐