<?php declare(strict_types=1); ini_set('display_errors', 'On'); error_reporting(-1); function foo(Human $human, string $name): void { $human->setName($name); } /** * Human类 */ class Human { private string $name; public function __construct(string $name) { $this->name = $name; } public function setName(string $name): void { $this->name = $name; } public function getName(): string { return $this->name; } } $human = new Human('张三'); echo '(1) name is ' . $human->getName() . PHP_EOL; // (1) name is 张三 foo($human, '李四'); echo '(2) name is ' . $human->getName() . PHP_EOL; // (2) name is 李四 $tmp = $human; $tmp->setName('王五'); echo '(3) name is ' . $human->getName() . PHP_EOL; // (3) name is 王五 //========== 总结 ==========// // 1、类实例(对象)入参是传地址,所以在函数内部对实例进行修改会影响函数外部的原始实例。 // 2、由于类实例(对象)入参是传地址,所以形参名前面加“&”符号是多余的。 // 3、把类实例(对象)赋值给一个临时变量也是传地址,修改临时变量就是修改原始实例。
Copyright © 2024 码农人生. All Rights Reserved