函数中的PHP类型声明(typehint)

时间:2015-10-19 10:47:15

标签: php function types parameters

据我所知,强制函数无法将其参数的类型提取为对象数组。

我认为通过将另一个对象定义为Traversable来实现这一目标,这将是所有MyObject的容器,否则它将在数组中并将typehint设置为Traversable。

但如果我能做到这一点,那就太酷了:

public function foo(MyObject[] $param) {}

所以我的问题是,PHP有什么理由不实现这个吗?

2 个答案:

答案 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)
?>