PHP中变量引用与变量破坏机制分析
本文分析了PHP中变量引用和变量破坏的机制,供大家参考,具体分析如下:变量是PHP的一个非常重要的类型。我们的数据是由变量或常量来操作的。让我们看一下变量引用和变量破坏。
在PHP中,符号代表一个引用。
1。看看没有提到这个情况:
将代码复制如下:$ =Hello World;定义一个变量,赋值给B
$ = $ / /;这一步之前没有符号$,这样$ B $ 。不,事实上,其原理是复制的变量$一个副本,这是申请一个地址存储在内存中的变量$。
在PHP中,使用直接赋值,实际上复制一个右变量到B,会产生一个内存空间,结果可能是内存中相同的内容的两个副本。在PHP的某些性能方面,它会有更多的内存空间。然而,在我的接触中,大多数人并不太注意它。事实上,一般应用程序的显著区别并不明显,我看不出有什么效果,但我并不经常使用它,嗯,但我认为深入了解实现的原则是非常必要的,我要注意原则。
2。使用符号引用
复制代码代码如下:$ Hello World;
美元=美元;
引用时,PHP引擎不会复制变量。事实上,它指向内存中$ A的地址指针,指针保存在B中。
因此,当使用引用时,更改$的值,并且a将改变。
例如:
复制代码代码如下:$ Hello World;
美元=美元;
$测试新值;去掉B的值,a的值会改变。
返回一个测试新值;输出,因为B的值的变化会改变A的值。
通常在定义函数时会看到类似的事情:
复制代码如下:功能测试(美元的)
{
函数定义
$参数+ +;
}
解读:美元的参数已经在它前面的一个参考,所以传入的参数不复制一个记忆,而是直接引用原始内存空间。所以如果变量通过与符号的值被修改,在原来的内存空间的值也会发生变化。
做如下测试:
复制代码如下:$ = 8;
测试(k);
在函数内部,更改$值,输出为9。
它也经常被称为调用函数:
复制代码如下:收益= test_func(美元);
以前对PHP引擎机制的理解是:=将正确的内容拷贝到左边的变量中,所以函数的使用不是复制函数的结果。事实上,我的理解是把指针指向左边的变量。
什么是指针和以前对C语言中概念的研究我的理解是:指针、指针、指针(指南针、HA)。很容易理解内存地址作为内存地址,而计算机知道在内存中查找数据。这是一个简单的理解,深我不会,呵呵。
总结:使用引用是为了减少内存资源的占用。
PHP手册中对引用的解释如下:
在PHP意味着同一个变量内容的不同名称访问的参考。这不是一个指针的C,而是引用符号表的别名。请注意,在PHP中,变量名和变量的内容是不同的,所以相同的内容可以有不同的名字,最恰当的比喻是UNIX文件名和文件本身的变量名是一个目录条目,和变量的内容是文件本身。参考可以看作是在UNIX文件系统的硬链接。
三.当变量被破坏时,它不会改变原来的值。
测试:$ = $;
现在我们改变了b的值,a的值也在变化。如果我们破坏了$ PIN(内存中没有空格,而不是NULL或值),那么a的值会被删除吗
事实上,在国外的PHP书籍中有一种特殊的引用机制,我2年前就看到了,不是很好,原理是当变量被删除时,它会自动复制。
事实上,这是为了避免B删除,导致A $也删除问题。
复制代码代码如下:< PHP
美元=;
美元=美元;
$ = 8;由于它被引用,所以B的值要去掉,a的值也要改为8。
var_dump($,$);
unset($); / /调用unset删除B变量,一个变量不会被删除
var_dump($,$); / /零输出8
当调用unset删除$变量,PHP引擎发现从变量符号表:$ B我想删除$,这是引用$,不易删除,因为删除$变量结果。因此,我们首先复制一个变量并删除。
关于PHP的符号表:事实上,我的理解是,运行中的所有变量都记录在其中,PHP是保持,和特定的数据存储在内存中,当然,PHP是基于符号表恢复的空间,不使用,并释放其占用的内存空间。在PHP的垃圾收集机制看(免费存储空间,不再使用),这是基于符号表。
例子
复制代码代码如下:< PHP
$长=big_long_variable_name ;
$长=php; / *使用存储在变量$长字符串中的一个新的变量的变量名,相当于$ big_long_variable_name =php;* /
短big_long_variable_name美元=美元; / *把变量big_long_variable_name美元的值赋给变量$短,美元价值是PHP 短
打印01 $短是$短。 是转义序列,输出一个$符号$,与此相同。下面的语句是输出:01 $短是PHP…
打印02长big_long_variable_name美元。;输出:02长是PHP…
>
< PHP
big_long_variable_name美元。=岩!; / * big_long_variable_name.the美元新分配重新分配过程,由于另外的背后big_long_variable_name美元。因此,变量big_long_variable_name美元(点)这个值应该是原始值(php)+新价值(岩!),完全变big_long_variable_name美元价值PHP的岩石!这是一样的。
打印03短/短$ *输出:03美元短是PHP *岩石!
打印04长big_long_variable_name美元; / *输出:04长是PHP *岩!
>
05美元是PHP摇滚!
06长是PHP岩石!
< PHP
在变量$短赋值中,由于在后面添加了一个短的$。(DOT),所以请参考这一分析的价值。
打印07短/短$ *输出:07美元短是PHP岩石!php编程!* /
打印08长big_long_variable_name美元; / *变短是由于美元重新分配程序PHP的岩石!,所以big_long_variable_name美元美元和短一起值被更改为PHP编程PHP岩岩!这个句子的输出是08长,是PHP的岩石!php编程!注意,如果相同的值的变量被设置(),另一个变量是不适用于这一情况,那就是,它不会被摧毁。* /
>
09美元是PHP编程!
10长编程PHP岩石!
< PHP
big_long_variable_name美元。=Web编程美元短; / * $ big_long_variable_name变量重新赋值,完整的价值应该是PHP的岩石!php编程!PHP编程!变短,美元的价值是与变量$ big_long_variable_name此时一致。请参阅第五和第十说明分析。* /
打印11短/短$ *输出:11 PHP岩石编程PHP网络!岩石!php编程!php编程!* /
打印12长为big_long_variable_name ;
>
< PHP
撤消($ big_long_variable_name)(取消); / *与变量big_long_variable_name美元的破坏,变为短将不会受到任何影响。* /
Print 13 /$short is $short ; / * although destroyed variable $big_long_variable_name, but the $short value is not affected, it was last assigned PHP rocks! php编程!php编程!php编程!* /
打印14长big_long_variable_name美元。; / * $ big_long_variable_name变量已被破坏,因此没有价值。输出:14长/。
雪;
>
< PHP美元短=无点test1 ; / *重新变为短作业。因为这不是在下面添加美元短。因此为短(期),没有一点test1的当前值。* /
打印15美元/美元是短的。; / *输出:15美元短期没有点test1 ..
短=没有点美元美元短test2 ; / *重新变为短作业。别再为短。(一段时间),但其最新的参考价值没有点test1 , /
打印16美元/美元是短的。; / *输出:16美元短期没有一点没有点test1,test2
希望本文能对大家的PHP程序设计有所帮助。