繁体   English   中英

PHP Function Arguments:特定Z9BD81329FEBF6EFE0FZ2788E03DDE的对象数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM