当前位置: 首页 > 后端技术 > PHP

什么是了解PHP的参考

时间:2023-03-30 03:25:09 PHP

?在PHP中引用意味着访问具有不同名称的相同变量的内容;注意:在PHP中,变量名和变量内容是不一样的,所以相同的内容可以有不同的名字。最接近的类比是Unix的`filename`和`fileitself`——变量名是目录项,变量内容是文件本身,引用可以看作是一个硬链接到`Unix`文件系统;example1.php注意:未定义的变量:ref1echo$var;//>foo?>引用不是什么?引用不是指针,这意味着像这样的结构会使The$var变量在foo函数在调用函数时绑定到$bar,但随后会反弹到$GLOBALS["baz"]。无法通过引用机制将$bar绑定到函数调用范围内的其他变量,因为函数foo中没有变量$bar(表示为$var,但$var只有变量内容,没有在)中调用符号表名称到值的绑定。example2.php/*打印结果:Array([0]=>A[1]=>1[2]=>2[3]=>3)Array([0]=>1[1]=>2[2]=>3)数组([0]=>A[1]=>1[2]=>2[3]=>3)数组([0]=>4[1]=>5[2]=>6)*/注意:example2.php中的$ref经历了Copy-on-Write简称COWcopy-on-writereference是做什么的?PHP引用允许两个变量指向相同的内容。example3.php这意味着$a和$b指向同一个变量。注意:这里的a>$a和$b是完全一样的,并不是$a指向$b或者相反,而是$a和$b指向同一个地方。b>如果一个带引用的数组被复制,它的值将不会被解引用。将数组传递给函数也是如此。c>如果一个未定义的变量通过引用赋值,通过引用参数传递或通过引用返回,该变量将被自动创建。example4.phpd);var_dump(property_exists($c,'d'));//bool(true)?>d>可以在返回引用的函数和new运算符中使用相同的语法:example4.php?>$bar=&newfooclass();$fll=&find_var($bar);?>自PHP5起,自动返回引用,因此在这里使用=&已过时并会产生E_STRICT级别的消息。e>不使用&运算符会导致生成对象的副本。如果在类中使用$this,它将应用于该类的当前实例。没有&的赋值将复制实例(即对象)并且$this将作用于副本,这并不总是期望的结果。由于性能和内存消耗问题,您通常只想处理一个实例。尽管可以使用@运算符(例如@new)在构造函数中抑制任何错误消息,但这对&new语句没有影响。这是Zend引擎的限制,会导致解析错误。f>注意:如果声明为global的变量在函数内部被赋值一个引用,则该引用仅在函数内部可见。这可以通过使用$GLOBALS数组来避免。example5.phpTreatglobal$var;as$var=&$GLOBALS['var']的简写;因此,将其他引用分配给$var只会更改局部变量的引用。example6.php引用的其他用途:引用做的第二件事是通过引用传递变量。这是通过在调用作用域中引用相同内容的函数中创建一个局部变量来实现的example7.php将使$a为6。这是因为变量$var指向与foo函数中的$a相同的东西。有关更详细的说明,请参阅按引用传递。引用传递可以将变量通过引用传递给函数,使函数可以修改其参数的值;example8.php注意:函数调用中没有引号-只有在函数定义。仅仅函数定义就足以使参数通过引用正确传递。在foo(&$a)中使用&;在最新版本的PHP中,会收到一条警告,指出“调用时按引用传递”已过时。以下内容可以通过引用传递:1>变量,如foo($a)2>新建语句,如foo(newfoobar())3>从函数返回的引用;example9.php//以下内容可以通过引用传递:Referencereturn当你想使用一个函数来查找引用应该绑定到哪个变量时,使用return引用。不要使用返回引用来提高性能,引擎足够聪明,可以自我优化。仅在有充分的技术理由时才返回引用!example10.phpvalue;}}$obj=newfoo;$myValue=&$obj->getValue();//42$obj->value=2;echo$myValue;//Print$obj->value,2.?>在这个例子中,getValue函数返回的对象的属性会被赋值,不会被复制,就像没有引用语法一样。注意:与参数传递不同,这里必须在两个地方使用&符号——表示返回一个引用而不是普通的副本,同时也表示$myValue被绑定为引用而不是普通的赋值。如果您尝试从这样的函数返回引用:return($this->value);,这将不起作用,因为您试图返回表达式的结果而不是引用的变量。只能从函数返回引用变量——没有其他方法。从PHP4.4.0和PHP5.1.0开始,如果代码试图返回动态表达式或new运算符的结果,则会发出E_NOTICE错误。解引用当你取消引用时,你只是打破了变量名和变量内容之间的绑定。这并不意味着变量内容被破坏。不会取消设置$b,只是$a。将此与Unix取消链接调用进行比较可能会有所帮助。引用定位许多PHP的句法结构都是通过引用机制实现的,因此上面关于引用绑定的所有内容也适用于这些结构。上面已经提到了一些构造,例如按引用传递和返回。其他引用结构有:1>global:当一个变量用global$var声明时,实际上是建立了对全局变量的引用。这意味着,例如,取消设置$var不会取消设置全局变量。2>$this:在对象方法中,$this总是对调用它的对象的引用。相关主题:$val){$val=&$data[$key];var_dump($data);}var_dump($data);?>欢迎指正错误和补充,谢谢!!!