PHP函数参数:特定类的对象数组

时间:2011-06-29 15:19:16

标签: php arrays function object arguments

我有一个函数,它接受一个特定类的成员:

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

谢谢!

6 个答案:

答案 0 :(得分:12)

不,不可能直接做。你可以试试这个“聪明”的技巧:

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

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

但我不确定这是否值得所有麻烦。如果addPage本身很有用,那将是一个很好的方法。

答案 1 :(得分:1)

不是传递对象数组(array(My_Page)),而是定义自己的类并在函数中需要它的实例:

class MyPages { ... }

public function addPages(MyPages pages)

答案 2 :(得分:1)

您还可以添加PhpDoc注释以在IDE中自动完成

    /**
     * @param My_Page[] $pages
     */
    public function addPages(array $pages)
    {
      // ...
    }

答案 3 :(得分:1)

从 php5.6 开始,您可以使用 splat 运算符 将所有数组元素输入为函数参数。在这种情况下,您没有比存储在数组中的 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

答案 4 :(得分:0)

如果您使用该类,则可以执行以下操作:

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

答案 5 :(得分:0)

<?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);
    
?>

我认为这是更好的方法

相关问题