我正在编写一个访问两个不同数据对象的PHP脚本 - 一个由DB支持,另一个包含会话数据。它们都包含相同的字段 - 即会话对象中的数据在验证后将进入数据库。
我正在尝试编写一个函数,它首先检查db-backed对象的值,然后检查session-data-backed对象的值。然而,它不像我期望的那样工作。这就是我所拥有的。
<?php
function check_cache($field){
// $App is the DB backed object, $data is the session object
return $app->$field ? $app->$field : $data->$field ? $data->$field : '';
}
?>
我希望能够像这样调用函数:
<input type="text" value="<?php echo check_cache('address'); ?>" />
...但函数总是不返回任何内容。当我用实际的内联代码替换函数调用时,用$field
替换我想要的字段名称,它可以工作。我错过了什么?
答案 0 :(得分:1)
你应该确保$ app和$ data存在于函数的范围内(通过将它们作为参数传递给我们,我会留给你)。试试这个:
<?php
function check_cache($field){
// $App is the DB backed object, $data is the session object
return $app->${$field} ? $app->${$field} : $data->${$field} ? $data->${$field} : '';
}
?>
你应该扩展这个以确保$ app-&gt; $$字段存在等等。
修改强>
这是非常错误的,正如评论中的bob-the-destroyer所指出的那样。你只需要$app->$field
。只需确保范围正确,您想要的成员不是私密的。道歉。
答案 1 :(得分:0)
我很想说它是一个范围问题,函数内部不存在$ app + $ data,只在外部。扩展函数以获取两个额外的参数,并以这种方式传入$ app + $ data对象。
<强>附录强>
这不会完全解决问题,你仍然需要访问对象的字段,具体取决于你的类结构,如果它的属性是私有的,会使一些备用答案不起作用,如字段将无法通过obj-&gt;字段语法访问。
答案 2 :(得分:0)
您可以尝试这样的事情:
<?php
function check_cache($field){
global $app, $data;
// $App is the DB backed object, $data is the session object
$av = eval("\$app->".$field);
$dv = eval("\$data->".$field);
return $av ? $av : $dv ? $dv : '';
}
?>