[英]PHP Function Arguments: Array of Objects of a Specific Class
我有一个 function 需要一个特定 class 的成员:
public function addPage(My_Page $page)
{
// ...
}
我想做另一个 function ,它需要一个 My_Page 对象数组:
public function addPages($pages)
{
// ...
}
我需要确保 $pages 数组的每个元素都是 My_Page 的一个实例。 我可以用foreach($pages as $page)
来做到这一点并检查 的instance of
,但是我可以在 function 定义中以某种方式指定数组必须是 My_Page 对象的数组吗? 即兴创作,例如:
public function addPages(array(My_Page)) // I realize this is improper PHP...
谢谢!
不,不可能直接做。 你可以试试这个“聪明”的把戏:
public function addPages(array $pages)
{
foreach($pages as $page) addPage($page);
}
public function addPage(My_Page $page)
{
//
}
但我不确定这是否值得所有的麻烦。 如果addPage
本身有用,那将是一个好方法。
您还可以在 IDE 中添加 PhpDoc 注释以获取自动完成功能
/**
* @param My_Page[] $pages
*/
public function addPages(array $pages)
{
// ...
}
不要传递对象数组( array(My_Page)
),而是定义您自己的 class 并在 function 中要求它的实例:
class MyPages { ... }
public function addPages(MyPages pages)
从 php5.6 开始,您可以使用splat 运算符将所有数组元素键入提示为 function 参数。 在这种情况下,您没有比存储在数组中的 Pages 更多的参数,因此它应该可以正常工作:
public function addPages(Page ...$pages)
更多信息: https://www.php.net/manual/en/migration56.new-features.php
https://lornajane.net/posts/2014/php-5-6-and-the-splat-operator
如果您使用 class,您可以执行以下操作:
interface addPageInterface
{
public function someThing();
}
class page implements addPageInterface
{
public function someThing()
{
//for example: create a page
}
}
class addPage
{
public function __construct(addPageInterface $page)
{
//do some thing...
return $page; //this will return just one page
}
}
class addPages
{
public function __construct(addPageInterface... $page)
{
//do some thing...
return $page; //this will return an array which contains of page
}
}
<?php
class Page{
public $a;
}
function addPages(Page ...$pages){
foreach($pages as $page){
}
}
$pages = [];
$pages[] = new Page;
$pages[] = new Page;
$pages[] = new Page;
addPages(...$pages);
?>
我认为这是更好的方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.