PHP类构造函数初始化的属性无法保留值是什么原因?
问题原因
你代码中的构造方法名称拼写错误,导致初始化逻辑从未被执行:
- PHP 规定类的构造方法固定名称为
__construct,你写的__constructor属于自定义普通方法,不会在类实例化时自动触发调用。 - 你注释掉
add_record内的赋值代码时,$test_var从未被赋值,所以输出为空,并不是类没有保留属性值。
修复方案
仅需要把构造方法的名称修改为正确的命名即可:
class test { public $test_var; public function __construct(){ $this->test_var = 'hello'; } public function add_record(){ print $this->test_var; } } $test = new test(); $test->add_record(); // 正常输出 hello
补充注意事项
- PHP 5.3.3 及之后的版本,和类名同名的方法也不再被识别为构造方法,统一使用
__construct作为构造方法命名。 - 开发阶段建议开启 PHP 错误提示,可更快定位这类魔术方法拼写错误的问题。
内容的提问来源于stack exchange,提问作者Bogghi
相关产品推荐
相关产品推荐

