据我所知,强制函数无法将其参数的类型提取为对象数组。
我认为通过将另一个对象定义为Traversable
来实现这一目标,这将是所有MyObject
的容器,否则它将在数组中并将typehint设置为Traversable。
但如果我能做到这一点,那就太酷了:
public function foo(MyObject[] $param) {}
所以我的问题是,PHP有什么理由不实现这个吗?
答案 0 :(得分:1)
您也可以
$arrYourObjectType = new YourObjectType[];
然后,如果对象数组是函数的返回类型,则在phpdoc中,在函数上方的phpdoc中键入提示返回值:
/**
* @param $whatever
* @return array ...$arrYourObjectType
**/
public function someFunction($whatever){
$arrYourObjectType[] = new YourObjectType[];
$x=0;
foreach($arrValues as $value)
{
$objYourObjectType = new YourObjectType();
$objYourObjectType->setSomething($value[0])
->setSomethingElse($value[1]);
(and so on)
//we had to set the first element to a new YourObjectType so the return
//value would match the hinted return type so we need to track the
//index
$arrYourObjectType[$x] = $objYourObjectType;
$x++;
}
return $arrYourObjectType;
}
然后在IDE(例如phpstorm)中,当使用包含该函数的类时,该函数的返回值将被视为对象的数组(适当提示),并且IDE将在对象的每个元素上公开对象方法。对象数组正确。
您可以在没有所有这些情况的情况下简单/肮脏地做事,但是phpStorm不会正确地提示对象数组元素上的方法。
如果将YourObjectType数组提供给函数...
/**
*@param YourObjectType ...$arrYourObjectType
**/
public function someFunction(YourObjectType...$arrYourObjectType){
foreach($arrYourObjectType as $objYourObject)
{
$someval = $objYourObject->getSomething();//will be properly hinted in your ide
}
}
与进给和检索对象数组有关的所有椭圆有关:-)
编辑:我对此有一些错误,因为我是从内存中完成的...更正了...抱歉,对此...
答案 1 :(得分:0)
我不太了解您的问题,但如果您想在对象中插入数据,您可以这样做:
<?php
class Insert
{
public $myobject = array();
public function foo($insert_in_object, $other_param_in_object) {
$this->myobject[] = $insert_in_object;
$this->myobject[] = $other_param_in_object;
return $this->myobject;
}
}
$start = new Insert();
$myobject = $start->foo('dog', 'cat');
var_dump($myobject)
?>