Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
日食不';无法解析php数组中的对象类型_Php_Eclipse_Ide - Fatal编程技术网

日食不';无法解析php数组中的对象类型

日食不';无法解析php数组中的对象类型,php,eclipse,ide,Php,Eclipse,Ide,我来自Java世界,尝试用Php做同样的“简单”的事情 我有一个不可变的虚拟数据对象: class BugTimeData { private $bugid = ""; private $startDate = ""; private $resolvedDate = ""; private $status = ""; private $weekends = ""; function __construct($bugid, $startDate

我来自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
。因此,我无法轻松访问公共方法

问题: 如何从类型
BugTimeData
向对象强制转换$value


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

你不能。因为PHP实际上是无类型的,当读取代码时,无法知道某个变量是什么类型。这只可能在运行时发生。

这只是IDE的问题,而不是PHP的问题。如果添加适当的注释类型提示,任何合适的IDE都会注意到它。例如,定义数组包含特定类型的对象:

/** @var BugTimeData[] $array */
$array = array();
如果数据来自函数或方法,请在方法签名中添加适当的
@return
文档标记。最坏情况下,在循环内标记变量:

foreach($time_prio_bug_content as $key => $value) {
    /** @var BugTimeData $value */
    var_dump($value->getStatus());
}

作为注释的替代方案,我相信您可以:


或者为强制转换实现一个类方法,类型暗示参数和返回对象(请参阅)

$value已经是一个对象。@当然,但不是从类型BugTimeData。PHP不支持您本机尝试执行的操作。我使用的IDE PhpStorm允许您使用注释来声明任何变量的类型(类或原语)。美好的我真的不明白,当PHP是一种动态类型化语言时,为什么可以对object、int、binary等进行强制转换。然而…问题解决了@sk2“动态类型”并不意味着“无类型”。PHP和Java一样是类型化的,但是类型是通过上下文推断的,不需要在任何地方显式声明(当然
$foo='bar'
是一个字符串,不需要声明),并且根据需要根据操作进行隐式转换(当然
$foo+$bar
使用两个整数,不需要显式转换)。唯一的区别是,您不需要冗余地键入
String String='String'
String.toNumber()
。类型提示用于参数,而不是返回值。它可以添加到PHP6中-这里是RFC形式:@BobGregor您完全没有抓住要点。我的代码(和链接)并不意味着键入提示函数返回值。而是在使用变量之前显式声明变量
$value
。我正在帮助IDE理解它在下面代码中的类型。啊!现在我明白你的意思了——你可能想在代码示例中添加一条注释,表明$value元素是IDE的一个临时提示。我以前用IDE做过这种黑客攻击。
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());
}