Typehinting数组模型

时间:2015-08-17 12:36:07

标签: php arrays laravel type-hinting

我想知道你是否可以在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
}

3 个答案:

答案 0 :(得分:4)

在PHP 5.6+中,您可以使用variable length argument lists来实现您的目标。

在调用函数时解压缩变量,函数在其签名中使用variadic参数。因此,不是传递一个User个对象数组,而是解包arrayCollectionUserfunction 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()"
}

phpDoc Array Documentation