Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP I'中的符号;我以前从未见过_Php_Smarty - Fatal编程技术网

PHP I'中的符号;我以前从未见过

PHP I'中的符号;我以前从未见过,php,smarty,Php,Smarty,我可能应该这么做,但我以前从未见过。在查看Smarty插件的文档时遇到它 $smarty =& new Smarty; 特别是=&符号。如果你把它输入谷歌,它就会被忽略,就像其他搜索引擎一样。这是用来干什么的 此函数签名也是如此: function connect(&$smarty, $reset = false) 为什么使用&symbol?符号将为变量指定一个引用,而不是对象的值。&是PHP的引用运算符。它用于返回对对象的引用。在本例中为“新Smarty”。&。以这种方式,

我可能应该这么做,但我以前从未见过。在查看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++内部工作方式类似的引用。并不是说它实际上向用户公开了内存地址,因为这是用户不应该知道的受保护信息。