1

我来自 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;
    }
}

A 将此类中的对象添加到数组中:

$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 来自 type BugTimeData。所以我不能以简单的方式访问公共方法。

问题: 如何将 $value 从 type 转换为对象BugTimeData

在 Java 中,这非常简单(因为我不需要强制转换,因为我可以在创建数组时定义对象的类型)并且直接。所以我想知道为什么这在 PHP 中是不可能的?

4

3 回答 3

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());
}
于 2013-05-31T10:57:50.367 回答
-1

作为 Annotation 的替代方法,我相信您可以这样输入提示

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());
}

或为强制类型转换实现一个类方法,类型提示参数和返回对象(参见链接

于 2013-05-31T21:43:03.807 回答
-2

你不能。因为 PHP 实际上是无类型的,并且在阅读代码时无法知道某个变量是什么类型。只有在运行时才有可能。

于 2013-05-31T10:57:10.333 回答