+ -
当前位置:首页 → 问答吧 → &引用变量的问题

&引用变量的问题

时间:2011-12-01

来源:互联网

PHP code


function _is_numerice($var)
{
    if(is_numeric($var))
    {
        return true;
    }
}

$var = 123456;

_is_numerice($var); 

_is_numerice(&$var);  //此处使用&, 是否增加了效率?


作者: gaozhen1990   发布时间: 2011-12-01

这样增加了效率PHP code
function _is_numerice(&$var)

作者: xsxs89757   发布时间: 2011-12-01

这么小的变量引用效率几乎没什么差别吧。数据量大的时候可能就有些提高。

还有怎么不直接 is_numeric($var) 了得。怎又写个函数又套了一下。

作者: ci1699   发布时间: 2011-12-01

(⊙o⊙)…。 是这样的, is_numerice只是个简单例子,里面还有好多分析代码的。  

function _is_numerice(&$var) 和直接使用 _is_numerice(&$var) 用什么区别吗?

作者: gaozhen1990   发布时间: 2011-12-01

1、由于只改变了变量的传递方式,并没有改变运算逻辑,所以只考虑内存的使用情况
PHP code
function _is_numerice($var)
{
    if(is_numeric($var))
    {
echo memory_get_usage(),PHP_EOL;
        return true;
    }
}

$var = 123456;

echo memory_get_usage(),PHP_EOL;
_is_numerice($var); 

echo memory_get_usage(),PHP_EOL;
_is_numerice(&$var);  //此处使用&, 是否增加了效率?

得到
696192
696192
696192
696192
结论:传值和传引用使用的内存是一样的

2、这种传引用的方式在 php 5.3 中已废止
Deprecated: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of _is_numerice(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in ...

已过时:调用时按引用传递已经过时,如果你想通过引用传递,修改_is_numerice声明()。如果你想使调用时按引用传递,你可以设置在您的INI文件在D allow_call_time_pass_reference

作者: xuzuning   发布时间: 2011-12-01

引用 3 楼 gaozhen1990 的回复:

(⊙o⊙)…。 是这样的, is_numerice只是个简单例子,里面还有好多分析代码的。

function _is_numerice(&$var) 和直接使用 _is_numerice(&$var) 用什么区别吗?

个人感觉,加引用和不加引用类似C里面的值传递和指针传递

_is_numerice($var); 
是在内存中复制一个和$var变量同样的值变量,把这个新变量交给函数使用,所以函数的运行不会影响外部的$var

_is_numerice(&$var);
是把$var的内存地址传给函数使用,函数运行的操作会直接影响函数外部的$var

弄个测试:
PHP code

$var=12345;
function test($a)
{
    return ++$a;
}
echo test($var).'<br>'.$var.'<br>';
echo test(&$var).'<br>'.$var.'<br>';

作者: sink   发布时间: 2011-12-01

相关阅读 更多