PHP中如何将属性的指针传入类方法?
问题解答
这种需求是可行的,下面提供两种常用的解决思路:
思路一:使用引用参数传递
PHP中要通过方法修改对象的私有属性,只需将方法参数声明为引用类型,调用时直接传递属性即可(无需在$this->a前额外加&)。修改后的代码如下:
class Person { private $a = "bob"; private $b = "jim"; private function setName(&$parameter) { $parameter .= " smith"; } public function test() { echo $this->a . PHP_EOL; // 输出 "bob" echo $this->b . PHP_EOL; // 输出 "jim" $this->setName($this->a); $this->setName($this->b); echo $this->a . PHP_EOL; // 输出 "bob smith" echo $this->b . PHP_EOL; // 输出 "jim smith" } } $p = new Person(); $p->test();
核心是在方法参数前添加&标记引用传递,方法内对$parameter的修改会直接作用到原属性上。
思路二:传递属性名称字符串
如果不想用引用传递,也可以将属性名以字符串形式传入方法,通过动态属性访问修改私有属性:
class Person { private $a = "bob"; private $b = "jim"; private function setName(string $propName) { $this->$propName .= " smith"; } public function test() { echo $this->a . PHP_EOL; // 输出 "bob" echo $this->b . PHP_EOL; // 输出 "jim" $this->setName('a'); $this->setName('b'); echo $this->a . PHP_EOL; // 输出 "bob smith" echo $this->b . PHP_EOL; // 输出 "jim smith" } } $p = new Person(); $p->test();
这种方式更直观体现对对象属性的操作,适合批量处理属性的场景。
你之前尝试的&$this->a写法无效,是因为PHP中对象属性的引用传递不需要在调用时加&,仅需在方法参数声明阶段标记引用即可。
内容的提问来源于stack exchange,提问作者Greg Steiner
相关产品推荐
相关产品推荐

