当我尝试在PDOStatement :: bindParam方法中绑定重载属性时,
$stmt->bindParam(':'.$field.'', $this->$field, $pdoparam);
...
public function __get($param)
{
if(isset($this->$param))
return $this->$param;
}
我收到通知
Notice: Indirect modification of overloaded property Msgs::$posttime has no effect in ...
经过一番研究后,我发现了一个关于php.net上类似problem的错误报告。建议的解决方案是添加一个&在__get定义之前。
&__get(...
但是当我尝试这样做时,我会收到另一个通知
Notice: Only variable references should be returned by reference in ...
PHP版本是5.3.8。
这个问题有解决办法吗?
答案 0 :(得分:5)
PDOStatement::bindParam
需要引用并可能修改传递给它的参数(将其转换为最合适的类型,或者如果它是OUT / INOUT参数则将结果写入它)。
PDOStatement::bindValue
不接受引用,也不修改参数。
__get
返回$this->$param
的值,但实际上并未将其作为对$this->$param
的引用,并且引用返回的值会产生此通知。它并非特定于PDO,即使简单的$x =& $this->$param
也会触发相同的通知。 使用bindValue
代替bindParam
来避免这种情况。
有关非参考__get
的更多解释:https://stackoverflow.com/a/5337433/1233508
答案 1 :(得分:0)
如果您确实将代码更改为&__get(...
,我认为您还应该更改以下行:
$stmt->bindParam(':'.$field.'', &$this->$field, $pdoparam);