Аргументы функций PHP: массив объектов определенного класса - PullRequest
12 голосов
/ 29 июня 2011

У меня есть функция, которая принимает член определенного класса:

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...

Спасибо!

Ответы [ 4 ]

13 голосов
/ 29 июня 2011

Нет, это невозможно сделать напрямую.Вы могли бы попробовать этот «умный» трюк вместо этого:

public function addPages(array $pages)
{
    foreach($pages as $page) addPage($page);
}

public function addPage(My_Page $page)
{
    //
}

Но я не уверен, стоит ли это всех хлопот.Было бы неплохо, если бы addPage был полезен сам по себе.

1 голос
/ 05 февраля 2019

Вы также можете добавить комментарий PhpDoc, чтобы получить автозаполнение в IDE

    /**
     * @param My_Page[] $pages
     */
    public function addPages(array $pages)
    {
      // ...
    }
1 голос
/ 26 декабря 2016

Вместо передачи массива объектов (array(My_Page)), определите свой собственный класс и потребуйте его экземпляр в вашей функции:

class MyPages { ... }

public function addPages(MyPages pages)
0 голосов
/ 28 декабря 2018

если вы используете класс, вы можете сделать что-то вроде этого:

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
   }
}
...