php: return与=区别及参数中$var=\'d\'与$var区别 => 难题已解
来源:互联网 发布:php 反射机制 编辑:程序博客网 时间:2024/06/09 17:04
<pre>
<?php
echo '--------test 1, 2 type 1---------<br/>';
$globalVar = 'global var';
var_dump(array('what is return' => test($old = 1, $new = 2, $globalVar = & $globalVar) ));
var_dump(array('<span style="color:red">call test over old value </span>' => $old));
echo '--------test 1, 2 type 2---------<br/>';
$old = 1;$new = 2;
var_dump(array('what is return' => test($old , $new , $gVar)));
var_dump(array('<span style="color:red">call test over old value </span>' => $old));
echo '--------test 1, 0 type 1---------<br/>';
var_dump(array('what is return' => test($old = 1, $new = 0, $globalVar = & $globalVar) ));
var_dump(array('<span style="color:red">call test over old value </span>' => $old));
echo '--------test 1, 0 type 2---------<br/>';
$old = 1;$new = 0;
var_dump(array('what is return' => test($old , $new , $gVar)));
var_dump(array('<span style="color:red">call test over old value </span>' => $old));
exit;
function test (& $old, $new, & $isCopyOrReferVar) {
global $globalVar;
var_dump(array('outside test global var is' => &$globalVar, 'inside is ' => &$isCopyOrReferVar, 'test === ' => ($isCopyOrReferVar === $globalVar)));
var_dump(array('new value is' => $new, 'old value is ' => $old));
return $old = $new or var_dump(array('when false old value is' => $old));
}
----------------结果-----------------
array(3) {["新值"]=>
int(2)
["旧值"]=>
int(1)
[0]=>
string(8) "未赋值时"
}
array(2) {
["返回值"]=>
bool(true)
["旧变新"]=>
int(1)
}
array(1) {
["最后"]=>
int(1)
}
array(3) {
["新值"]=>
int(2)
["旧值"]=>
int(1)
[0]=>
string(8) "未赋值时"
}
array(2) {
["返回值"]=>
bool(true)
["旧变新"]=>
int(2)
}
array(1) {
["最后"]=>
int(2)
}
--------------测试代码改成新值为0时------------
<pre><?php
var_dump(array('返回值' => test($old = 1, $new = 0), '旧变新' => $old));
var_dump(array('最后' => $old));
$old = 1;$new = 0;
var_dump(array('返回值' => test($old , $new ), '旧变新' => $old));
var_dump(array('最后' => $old));
exit;
function test (& $old, $new) {
var_dump(array('新值' => $new, '旧值' => $old, '未赋值时'));
return $old = $new or var_dump(array('新值' => $new, '旧值' => $old, '赋值为false'));
}
---------------结果-----------
array(3) {["新值"]=>
int(0)
["旧值"]=>
int(1)
[0]=>
string(8) "未赋值时"
}
array(3) {
["新值"]=>
int(0)
["旧值"]=>
int(0)
[0]=>
string(11) "赋值为false"
}
array(2) {
["返回值"]=>
bool(false)
["旧变新"]=>
int(1)
}
array(1) {
["最后"]=>
int(1)
}
array(3) {
["新值"]=>
int(0)
["旧值"]=>
int(1)
[0]=>
string(8) "未赋值时"
}
array(3) {
["新值"]=>
int(0)
["旧值"]=>
int(0)
[0]=>
string(11) "赋值为false"
}
array(2) {
["返回值"]=>
bool(false)
["旧变新"]=>
int(0)
}
array(1) {
["最后"]=>
int(0)
}
---------------------测试代码---------
<pre>
<?php
$gVar = 'aaaa';
var_dump(array('返回值' => test($old = 1, $new = 2, $gVar = & $gVar), '旧变新' => $old));
var_dump(array('最后' => $old));
$old = 1;$new = 2;
var_dump(array('返回值' => test($old , $new , $gVar), '旧变新' => $old));
var_dump(array('最后' => $old));
exit;
function test (& $old, $new, & $test) {
global $gVar;
var_dump(array( &$gVar, &$test ));
var_dump(array('新值' => $new, '旧值' => $old, '未赋值时'));
return $old = $new or var_dump(array('新值' => $new, '旧值' => $old, '赋值为false'));
}
------------结果(没搞明白有色部分怎么回事)--------------
array(2) {
[0]=>
&string(4) "aaaa"
[1]=>
&string(4) "aaaa"
}
array(3) {
["新值"]=>
int(2)
["旧值"]=>
int(1)
[0]=>
string(8) "未赋值时"
}
array(2) {
["返回值"]=>
bool(true)
["旧变新"]=>
int(1)
}
array(1) {
["最后"]=>
int(1)
}
array(2) {
[0]=>
&string(4) "aaaa"
[1]=>
&string(4) "aaaa"
}
array(3) {
["新值"]=>
int(2)
["旧值"]=>
int(1)
[0]=>
string(8) "未赋值时"
}
array(2) {
["返回值"]=>
bool(true)
["旧变新"]=>
int(2)
}
array(1) {
["最后"]=>
int(2)
}
----------------------分析-----------------
return 比 or 比=运算级都要低,基本相当整句都运算结束后才到它.
而=号比or的运算要高.
所以如果像以下情况,必须要分二行写:
function query($sql) {
$sql = @mysql_query($sql) or die (tip('查询语句出错:' . mysql_error()));
return $sql;
}
调用func时,funcName($var = 2);这种写法相当于复制传递?
猜了几次,测试都不对,这个问题有点怪.那天想到证实方法先.
<?php
function f(& $var, & $isRefer){$var = rand(); $isRefer='kkkkk'; global $gVar;var_dump($gVar); var_dump(array('are they same?' => $isRefer === $gVar)); return $var;}
$gVar = 'global var';
echo f($var ="a_", $gVar = & $gVar).'<br/>'; /* outpu a random number */
echo $var.'<br/>'; /*but don't change global variables, it still is "1<br/>", no the same like up line */
echo f($var, $gVar).'<br/>'; /* outpu a random number */
echo $var.'<br/>'; /* haved change, the same like up line */
?>
是把=式计算后的结果复制一份给func,但是复制应该是临时变量,所以& $var才不会提示出错.而不像string常量,下面是问答论坛中的讨论
http://stackoverflow.com/questions/8693068/why-echo-var-is-different
里面一位还误认为传递了bool值true;
- php: return与=区别及参数中$var=\'d\'与$var区别 => 难题已解
- var d=Date() 与 var d=new Date在JSC的区别
- var a = {} 与 var a = function(){} 的区别
- 在Javascript中 声明时用"var"与不用"var"的区别,== 和 ===的区别
- var与dynamic区别
- var与dynamic区别
- 关于JavaScript中变量申明语句var variable = xxxx与var $variable = xxxx的区别
- PHP中var用与不用的区别
- Makefile中变量$var与$$var的区别详谈
- var 与 不var 的区别
- shell中的变量 $VAR 与 ${VAR}区别
- function method(){}与var method = function(){}的区别
- function-a(){}与var-b-=-function(){}的区别
- ES6中let与var区别
- ECMAScript中let与var的区别
- ES6中let与var的区别
- jquery中 var obj =$("p") 后,obj.html()与$(obj).html()有没有区别?
- js中 var a = function(){} 与function b(){}两种函数声明的区别
- hta 北京自动挂号器
- discuz 海量信息公司的保10洁 2.1.0使用了短php标签在不支持<?的配置上出现奇怪问题
- linux 删除以-开头的文件名的文件
- godday:Just Days Left to SAVE - 31% OFF ENDIN
- php: 字符串定界符(<<<)形式定义字符串结束必须换行
- php: return与=区别及参数中$var=\'d\'与$var区别 => 难题已解
- php: 正则中匹配$符号的写法
- ie的新版本js的window.onerror.caller.caller最终总是指向自身导致死环
- ie的innerHTML访问出错,无语的错误
- 数据挖掘之模式挖掘(频繁模式挖掘与Apriori算法)
- apache 日志:customlog配置的piped log program \'/log.sh\' failed unexpectedly错误->解决
- 4.9
- linux:bash脚本管道(|)输入而非参数的获取方式
- linux:用php语法写脚本且获取stdin/stdout的方式,对于不想使用bash语法非常有用