簡體   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