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