UNPKG

manual-php

Version:
82 lines (64 loc) 1.66 kB
# 对象和引用 在 PHP 的对象编程中经常提到的一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。PHP 的引用是别名,就是两个不同的变量名字指向相同的内容。在 PHP 中,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。 ```php <?php class Foo { /** * Just a test property. * * @var string */ public string $property = 'foo'; } $foo = new Foo(); $bar = $foo; $foo->property = 'bar'; var_dump($bar->property); // string(3) "bar" ``` 标识符的拷贝和引用: ```php <?php class Foo { /** * Just a test property. * * @var string */ public string $property = 'foo'; } $foo = new Foo(); $bar = $foo; $baz = &$foo; $foo = null; var_dump($foo); // NULL var_dump($bar); // object(Foo)#1 (1) { ["property"]=> string(3) "foo" } var_dump($baz); // NULL ``` 当对象作为参数传递: ```php <?php /** * Change the specified property of the specified class. * * @param Foo $instance * @return void */ function foo(Foo $instance) { $instance->property = 'bar'; } class Foo { /** * Just a test property. * * @var string */ public string $property = 'foo'; } $foo = new Foo(); foo($foo); var_dump($foo->property); // string(3) "bar" ```