PHP I'中的符号;我以前从未见过
我可能应该这么做,但我以前从未见过。在查看Smarty插件的文档时遇到它PHP I'中的符号;我以前从未见过,php,smarty,Php,Smarty,我可能应该这么做,但我以前从未见过。在查看Smarty插件的文档时遇到它 $smarty =& new Smarty; 特别是=&符号。如果你把它输入谷歌,它就会被忽略,就像其他搜索引擎一样。这是用来干什么的 此函数签名也是如此: function connect(&$smarty, $reset = false) 为什么使用&symbol?符号将为变量指定一个引用,而不是对象的值。&是PHP的引用运算符。它用于返回对对象的引用。在本例中为“新Smarty”。&。以这种方式,
$smarty =& new Smarty;
特别是=&符号。如果你把它输入谷歌,它就会被忽略,就像其他搜索引擎一样。这是用来干什么的
此函数签名也是如此:
function connect(&$smarty, $reset = false)
为什么使用&symbol?符号将为变量指定一个引用,而不是对象的值。&是PHP的引用运算符。它用于返回对对象的引用。在本例中为“新Smarty”。
&
。以这种方式,connect()
可以操作$smarty
对象,以便调用函数可以检索修改过的对象
类似地,
=&
通过引用设置变量。正如Tim所说,这是对变量的引用。但如果您使用的是最新版本的PHP,那么所有类对象都是通过引用传递的。如果您正在传递数组或其他内置类型,则仍然需要此选项。第一个示例是返回引用,第二个示例是传递引用
您可以在PHP中阅读所有关于它的内容实际上,这段代码是为了与PHP4兼容而编写的。在PHP5中,符号是无用的(正如Tim所说,因为PHP5,所有对象都是通过引用传递的) 对于PHP4,所有变量都是按值传递的。 如果要通过引用传递,则必须声明引用赋值:
$ref_on_my_object =& new MyObject();
PHP 5默认配置仍然接受此代码,但最好编写:
$ref_on_my_object = new MyObject(); // Reference assignment is implicit
对于你的第二个问题,这个问题“几乎”是一样的。。。
因为PHP允许您声明函数参数(resp.types),而您不能为返回值声明函数参数。
公认但“不太好”的做法是避免函数声明中的引用声明:
function foo($my_arg) {
// Some processing
}
并且打电话给推荐人
$my_var;
$result = foo( &$my_var );
// $my_var may have changed because you sent the reference to the function
理想的宣言更像是:
function foo( & $my_input_arg ) {
// Some processing
}
然后,该呼叫会松开“与”:
$my_var;
$result = foo( $my_var );
// $my_var may have changed because you sent the reference to the function
符号AND运算符的主要用途之一是通过内存地址传递。这通常是当您希望更改变量但不返回时所做的操作 function test_array(&$arr) { $varr[] = "test2"; } $var = array('test'); test_array($var); print_r($var); this should output array( test , test2 ); 功能测试_阵列(&$arr) { $varr[]=“test2”; } $var=数组('test'); 测试单元阵列($var); 印刷费($var); 这应该是输出 数组(test,test2);
这通常是在您需要将正在使用的实际副本[内存地址]传递到另一个函数/对象时进行的。通常,它被用来缓解内存不足和加速性能,这是C/C++和其他一些低级别语言的一个特点。也用于返回引用。注意在第一个例子中,你只需要在PHP4中使用这个词。Word与谷歌一起工作,比如“等于AMPLE和PHP”。我认为你没有传递内存地址。。。我想,你正在处理一个关于zval的引用,它保存着数据…我理解。我只是想暗示,该语言将使用与C/C++内部工作方式类似的引用。并不是说它实际上向用户公开了内存地址,因为这是用户不应该知道的受保护信息。