有人可以给我一个Laravel 5框架的"类型提示"的定义

Spi*_*lot 5 php frameworks laravel-5

我已经阅读了Laravel文档,但仍然不清楚.由于它对我来说含糊不清,每当这个术语与另一个概念有关时,也很难理解这个新概念.

mis*_*tin 14

类型提示不是Laravel独有的......这是一个简单的解释.

没有类型提示的示例:

function foo ($arr = array(), $str = '') {
    var_dump($arr);
    var_dump($str);
}
Run Code Online (Sandbox Code Playgroud)

此函数需要一个数组作为第一个参数,一个字符串作为第二个参数.但没有什么可以强制执行的.我可以foo()用两个字符串调用,没有问题.

类型提示示例:

function foo (array $arr = array(), $str = '') {
    var_dump($arr);
    var_dump($str);
}
Run Code Online (Sandbox Code Playgroud)

这里唯一的区别是array之前的类型提示$arr.现在尝试用两个字符串调用该函数将返回致命错误,因为第一个参数必须是一个数组.

有关进一步说明以及找出支持的类型提示,请参阅文档.


Ser*_*nyy 14

Laravel服务容器用于解析所有Laravel控制器.因此,您可以在其构造函数中键入提示控制器可能需要的任何依赖项.声明的依赖项将自动解析并注入控制器实例:

<?php

namespace App\Http\Controllers;

use App\Repositories\UserRepository;

class UserController extends Controller
{
    /**
     * The user repository instance.
     */
    protected $users;

    /**
     * Create a new controller instance.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,控制器将自动为您创建App\Repositories\UserRepository实例,这非常方便

您可以在此处详细了解这些功能

  • 顺便说一句,“Illuminate\Routing\ControllerDispatcher”从“Illuminate\Routing\RouteDependencyResolverTrait”特征中调用“resolveClassMethodDependency()”函数来初始化您在控制器中作为函数参数放置的所有参数 (2认同)