我来自Java世界,在Php中尝试相同的“简单”事情。
我有一个不可变的虚拟数据对象:
class BugTimeData {
private $bugid = "";
private $startDate = "";
private $resolvedDate = "";
private $status = "";
private $weekends = "";
function __construct($bugid, $startDate, $resolvedDate, $status) {
$this->bugid = $bugid;
$this->startDate = $startDate;
$this->resolvedDate = $resolvedDate;
$this->status = $status;
}
function getBugId() {
return $this->bugid;
}
function getStartDate() {
return $this->startDate;
}
function getResolvedDate() {
return $this->resolvedDate;
}
function getStatus() {
return $this->status;
}
function getWeekendsBetween() {
return $this->weekends;
}
}
将此类中的对象添加到数组中:
$data= new BugTimeData($a, $b, $c, $d);
array_push($content, $data);
我想迭代这个数组,读出对象并访问它们的方法:
foreach($time_prio_bug_content as $key => $value) {
var_dump($value->getStatus());
}
这个有效!但我的IDE(Eclipse)并不真正知道$ value来自BugTimeData
类型。所以我无法轻松访问公共方法。
问题:
如何将$ value转换为BugTimeData
类型的对象?
在Java中,这非常简单(因为我不需要强制转换,因为我可以在创建数组时定义对象的类型)并且直接进行。所以我想知道为什么这在Php中是不可能的?
答案 0 :(得分:3)
这只是IDE的问题,而不是PHP的问题。如果添加适当的注释类型提示,任何体面的IDE都会接受它。例如,定义数组包含某种类型的对象:
/** @var BugTimeData[] $array */
$array = array();
如果数据来自函数或方法,请在方法的签名中添加适当的@return
文档标记。最坏的情况是,在循环内标记变量:
foreach($time_prio_bug_content as $key => $value) {
/** @var BugTimeData $value */
var_dump($value->getStatus());
}
答案 1 :(得分:-1)
作为Annotation的替代方案,我相信你可以type hint这样:
var $value = new BugTimeData; // this tells the IDE which type the variable will hold from here on
foreach($time_prio_bug_content as $key => $value) {
var_dump($value->getStatus());
}
或为类型提示参数和返回对象的类型实现一个类方法(参见link)
答案 2 :(得分:-2)
你做不到。因为PHP实际上是无类型的,并且在读取代码时无法知道某个变量的类型。它只能在运行时使用。