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