我的php代码有一个奇怪的问题。这是我正在使用的php版本PHP 5.3.2-1ubuntu4.30 with Suhosin-Patch
。
我遇到的问题是我无法将任何内容分配给属于我的类的变量
namespace Stats\POTSPortStats;
use PDO;
use Stats\Port;
use Stats\POTSPortStats\IPHosts\IPHosts;
class PortStats extends Port
{
public $vcPortOnHookStatus;
public $vcPortImpedance;
public $ipHosts;
/**
* @param $secretValue int
* @param $pdo_conn PDO
* @return PortStats[]
*/
public static function getAll($secretValue, $pdo_conn){
try {
$query =
"SELECT * FROM secretTable WHERE secretColumn = :secretValue";
$pdo_stmt = $pdo_conn->prepare($query);
$pdo_stmt->bindValue(":secretValue", $secretValue, PDO::PARAM_INT);
$pdo_stmt->execute();
/** @var PortStats $result */ //This works right
$result = $pdo_stmt->fetchAll(PDO::FETCH_CLASS, __CLASS__);
//other is assigned an Array of IPHosts classes
$other = IPHosts::getAll($secretValue, $pdo_conn);
echo json_encode($other);
//Checked for result, it is there.
$result->ipHosts = $other;
//Check just assigned value
var_dump($result->ipHosts);
//Value was NULL
} catch (\PDOException $e) {
//nothing here
var_dump($e);
}
//The rest of the result is returned correctly
return $result;
}
我忽略了我的代码有什么问题吗?这个版本的PHP里面是否存在某些我在看的时候没找到的错误?任何帮助将非常感激。请询问您是否需要更多说明。
答案 0 :(得分:4)
我认为问题出在这一行:
$result = $pdo_stmt->fetchAll(PDO::FETCH_CLASS, __CLASS__);
你确定pdo_stmt-> fetchAll(...)返回一个PortStats类型的对象吗?我不这么认为。它返回一个数组。更重要的是,我不认为你可以隐式地投射到类PortStats。
尝试:
$results=$pdo_stmt->fetchAll(PDO::FETCH_CLASS, __CLASS__);
foreach($results as $result){
var_dump($result);
}
答案 1 :(得分:0)
我认为下一行可能存在问题。
$other = IPHosts::getAll($nCircuitStatsID, $pdo_conn);
我无法在代码中的任何其他位置定义$nCircuitStatsID
。
它是全球性的吗?
我还希望fetchAll()
返回__CLASS__
类型的数组,而不是__CLASS__
的实例。