You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:49