我想知道你是否可以在php中输入一个模型数组(更明确的是Laravel)。
代码示例:
use App\User;
public function index(User $user)
{
// do something with the user
}
我的问题是,有没有办法输入用户模型数组:
use App\User;
public function index(array User $users) //this is wrong ..
{
// do something with the users
}
答案 0 :(得分:4)
在PHP 5.6+中,您可以使用variable length argument lists来实现您的目标。
在调用函数时解压缩变量,函数在其签名中使用variadic参数。因此,不是传递一个User
个对象数组,而是解包array
或Collection
个User
个function deleteUsers(User ...$users)
{
// delete the users here
}
$users = [$user1, $user2, $user3];
deleteUsers(...$users);
个对象,并根据您提供的类型提示检查所有对象。
示例:强>
array
解包将同时适用于常规Collection
和Laravel Traversable
对象或任何其他deleteUsers($user1, $user2, $user3);
变量或文字,以便输入参数列表。
这相当于执行以下操作:
<div class="slider-section2" style="overflow:hidden">
<div class="slid-container">
<ul class="slickImage" ng-if="loadSwiper" ng-init="previewAd.loadSwiperImages()">
<li ng-repeat="image in ads.adDetailForPreview.MainAdsImages track by $index">
<div class="block-cont">
<img ng-class="IsRegularSizeAd?'':'DoubleSizeImg'" ng-src="~/Content/Images/AdsImages/{{image.Path}}" />
</div>
</li>
</ul>
</div>
</div>
答案 1 :(得分:1)
不,你不能这样做。您可以做的最好是将参数键入作为数组。您可以在此处阅读有关PHP中的类型提示的更多信息:http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration
答案 2 :(得分:1)
我知道答案已被接受,但这可能是一半,这取决于你的IDE实现phpDoc的程度(PhpStorm肯定支持这一点但去年我们在让Eclipse支持它时遇到了问题)。
phpDoc通过Class[]
语法支持类型化数组。所以你可以这样做:
use App\User;
/**
* @var User[] $user
*/
public function index(array $users)
{
// do something with the users
}
这不会限制某人将一组非User
对象传递给index
(如果他们传入一个字符串,则类型提示为array
类型) ,但它会为他们提供预期的指导,并且当你这样做时它会让你得到代码提示:
foreach ($users as $user) {
$user->dele // Depending on IDE, this will code hint/complete "delete()"
}