Аргументы функции PHP: массив объектов определенного класса
У меня есть функция, которая принимает член определенного класса:
public function addPage(My_Page $page)
{
// ...
}
Я хотел бы сделать еще одну функцию, которая принимает массив объектов My_Page:
public function addPages($pages)
{
// ...
}
Мне нужно убедиться, что каждый элемент массива $pages является экземпляром My_Page. Я мог бы сделать это с помощью foreach($pages as $page)
и проверить instance of
, но могу ли я как-то указать в определении функции, что массив должен быть массивом объектов My_Page? Импровизация, что-то вроде:
public function addPages(array(My_Page)) // I realize this is improper PHP...
Спасибо!
Ответы
Ответ 1
Нет, это невозможно сделать напрямую. Вместо этого вы можете попробовать этот "умный" трюк:
public function addPages(array $pages)
{
foreach($pages as $page) addPage($page);
}
public function addPage(My_Page $page)
{
//
}
Но я не уверен, что это стоит всех проблем. Это был бы хороший подход, если addPage
полезен сам по себе.
Ответ 2
Вместо передачи массива объектов (array(My_Page)
) определите свой собственный класс и потребуйте его экземпляр в своей функции:
class MyPages { ... }
public function addPages(MyPages pages)
Ответ 3
если вы используете класс, вы можете сделать что-то вроде этого:
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
}
}
Ответ 4
Вы также можете добавить комментарий PhpDoc, чтобы получить автозаполнение в IDE
/**
* @param My_Page[] $pages
*/
public function addPages(array $pages)
{
// ...
}