PHP扩展类属性赋值异常:Comun类departamento始终为NULL
问题修复:Comun类departamento属性始终为NULL的解决办法
嘿,我一眼就发现问题所在啦——都是拼写错误和方法调用方式不对搞的鬼!咱们挨个来修正:
错误1:构造函数名称拼写错误
PHP的构造函数魔术方法是严格的__construct(注意最后有个t),但你在Comun类里写成了__construc,少了一个字母!这种情况下,当你实例化Comun对象时,PHP会自动使用默认的空构造函数,而不会执行你写的那段构造逻辑,这就导致父类的构造没被调用,departamento也完全没被赋值。
错误2:调用父类构造时同样拼写错误
你在Comun类的构造里调用parent::__construc($row),这里同样少了t,应该改成parent::__construct($row)才能正确触发父类的构造逻辑。
错误3:成员方法调用方式错误
你写的setDepartamento($row['departamento'])是在尝试调用全局函数,但setDepartamento是Comun类的成员方法,必须用$this->来调用它;其实更直接的方式是直接给属性赋值,省得绕个setter的弯。
修正后的Comun类代码
<?php class Comun extends Modulo { private $departamento; public function __construct($row) { // 正确调用父类构造 parent::__construct($row); // 直接赋值,或者用下面的setter方法二选一 $this->departamento = $row['departamento']; // $this->setDepartamento($row['departamento']); } public function setDepartamento($departamento) { $this->departamento = $departamento; } // 建议新增getter方法,方便后续获取departamento值 public function getDepartamento() { return $this->departamento; } }
为什么之前显示NULL?
因为构造函数名称拼写错误,PHP没有执行你写的构造逻辑:既没调用父类的构造初始化那些继承来的属性,也没给departamento赋值,所以var_dump的时候这个属性自然是NULL。
修正之后,你再实例化Comun对象,departamento就能正确获取到表单提交的值啦!
内容的提问来源于stack exchange,提问作者Nacho Diaz
相关产品推荐
相关产品推荐

