php之引用

21次阅读
没有评论

共计 1441 个字符,预计需要花费 4 分钟才能阅读完成。

今天看别人的代码,在类的静态变量前加了 & 符号,类似于下面

class c
{static function &instance() {}}

倍感好奇,查了一下,总结出来写于下:

1. 什么叫引用?以及怎么使用引用。
2. 引用的方式是什么?包括变量、函数、类。
3. 引用的作用

1.1 什么叫引用

在 PHP 中引用意味着 用不同的名字访问同一个变量内容 。这并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址…… 查看引用不是什么了解更多信息。替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此 同样的内容可以有不同的名字 。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。 引用可以被看作是 Unix 文件系统中的硬链接

官方介绍 http://php.net/manual/zh/language.references.whatare.php
熟悉 Linux 的话,可以参考 ln 命令,将一个文件硬链接到其他目录,修改任意文件,则两个文件都会被修改.

说白了,就是用不同的名字访问同一个变量内容,假如有变量 a,变量 b 引用了变量 a。则变量 a 和 b 都可以访问、修改变量 a 的内容。

1.2 如何使用引用

在需要引用的对象前加 & 符号.

2.1 变量的引用方式

在需要引用的变量前加上 & 符号。

$a = 123;
$b = &$a;
#输出 123
echo $a;
#输出 123
echo $b;
$b = 456;
#输出 456.
echo $a;

2.2 函数的引用方式

2.2.1 引用传递

可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。语法如下:
官方提供了一个例子

<?php
function foo(&$var)
{$var++;}
$a=5;
foo($a);
// $a is 6 here
echo $a;
?>

上面的例子中,如果形参前没有加 & 符号,则在函数调用后,$a 的值为 5,加上 & 符号后,在函数调用后,$a 的值就为 6. 这是因为在函数中 $var 的值进行的改变,影响了函数外的变量.

注意,只有以下内容可以通过引用传递:

  1. 变量,例如 foo($a)
  2. New 语句,例如 foo(new foobar())
  3. 从函数中返回的引用,例如:

如果在上面调用 foo(5),就会报告一个致命错误, 必须得是变量才可以

Fatal error: Only variables can be passed by reference

2.2.2 引用返回

引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用,使用此语法:

<?php
class foo {
    public $value = 42;
    #注意这里,只有 & 符号,没有 $ 符号
    public function &getValue() {return $this->value;}
}
$obj = new foo;
#myValue 的值是 42, 并将 myValue 的地址和对象中的 value 绑定
$myValue = &$obj->getValue();
#修改 value 的值,也就是修改了 myValue 的值
$obj->value = 2;
#输出 2
echo $myValue;              

3 PHP 的引用作用。

上面的例子其实已经能够说明,PHP 的引用允许用两个变量来指向同一个内容。

总结

回到最初的问题

    static function &instance() {}

其实就是一个单例,但不知道为什么这么写,猜测,在后面调用 instance 时,如果不带引用则普通读取,带引用则可以修改此单例.

正文完
 0
admin
版权声明:本站原创文章,由 admin 于2017-09-25发表,共计1441字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码