由于某种原因,PHP 无法间歇性地为我的对象的属性赋值!如果我继续刷新页面,它可以工作大约 4 次 5 次,但在失败的页面上没有分配所有值,我计算出缺少对象值。
我有一个函数来收集数据库行并将其分配给对象。查询不是每次拉取数据的问题。问题与这条线有关
$obj->$key = str_replace("''","'",$row[$value[0]]);
我打印出来以确保值在那里,然后直接打印出对象参数,我可以看到所有属性值都是空白的。并不是说这与值本身无关,如果我只是将值设置为硬编码字符串,同样的事情会发生
$obj->$key = 'a'
我对标准变量没有这个问题,值总是在那里,似乎不能为对象参数值分配 1 次,而不是 5 次。
这似乎不是与代码相关的问题,因为它工作了 4 次中的 5 次。
function getRow($class,$where = false,$order = false, $limit = false) {
$obj = new $class();
$sql = "select * from ".$obj->table." where 1 ";
if ($where) {
foreach ($where as $key => $value) {
$opvalue = $this->getOperator($value);
$op = $opvalue[0];
$value = $opvalue[1];
if ($obj->cols[$key][1] == 1)
$sql .= "and ".$obj->cols[$key][0]." $op $value ";
else if ($obj->cols[$key][1] == 2)
$sql .= "and ".$obj->cols[$key][0]." $op '$value' ";
}
}
if ($order)
$sql .= "order by $order ";
if ($limit)
$sql .= "limit $limit ";
$res = $this->runQuery($sql);
//map values
if ($row = mysql_fetch_assoc($res)) {
// print_r($row);
foreach ($obj->cols as $key => $value) {
if ($obj->cols[$key][1] == 3) {
$obj->$key = poststringToArray($row[$value[0]]);
}
else {
$obj->$key = str_replace("''","'",$row[$value[0]]);
// echo "obj->$key = {$row[$value[0]]}<br>";
//
// echo "obj->$key = ".$obj->$key.'<br>';
}
}
// echo '<p>';
// print_r($obj);
// echo '</p>';
}
else {
return false;
}
return $obj;
}
忘记上面的复杂代码,这里有一个简单的示例,其中属性值将间歇性地为空丢失,但变量保留该值。如果我不断刷新这个脚本,'id'的值有时会为空!
Class SalesOrderService {
var $id;
}
$test = 'a string';
echo 'the value of $test is '''.$test."'";
echo '<p> </p>';
$so = new SalesOrderService();
$so->id = 'aaa';
print_r($so);
解决方案是 5.3 中的一个错误 我升级到5.4,现在工作正常