我在laracasts中一直在观看'Jeffrey Way'的'laravel',我不明白他是如何使用类构造函数的,以及代码所产生的差异。这是我之前的构造函数代码:
class PostController extends BaseController
{
public function index()
{
$posts = Post::orderBy('id','DESC')->get();
return View::make('index')->with('posts',$posts);
}
这是我的后代码
class PostController extends BaseController
{
protected $post;
public function __construct(Post $post) {
$this->post = $post;
}
public function index()
{
$posts = $this->post->orderBy('id','DESC')->get();
return View::make('index')->with('posts',$posts);
}
我如何使用
中的方法访问Post类和它的静态函数$this->post
答案 0 :(得分:0)
protected $post;
public function __construct(Post $post) {
$this->post = $post;
}
首次调用此类时使用Construct,因此通常使用构造函数在第一个实例上设置数据。
此构造只能通过传递$ post var的POST类启动,然后将受保护的属性赋予$ post的对象。
然后可以通过索引函数
使用它这有帮助吗?
答案 1 :(得分:-1)
当创建该类的新实例时(当您调用新的PostController时)调用类构造函数,他在这里所做的只是在对象上设置受保护的属性并使用依赖注入将该依赖项的实例传递给__construct方法。
在Laravel(以及一般的MVC)中,当路由与该控制器上的操作匹配时,控制器将由框架构建,并且对于IoC容器,类型提示依赖关系并添加服务提供者对于Laravel来说就足够了解决依赖。
您可能需要了解Eloquent Facades,当您在Eloquent类上调用静态方法时,它将构造该类的新实例并在实例上调用该方法(而不是静态),所以
Post::all(); // is the same as
(new Post)->all();
class Test
{
public function __construct()
{
echo 'Constructor was called';
}
}
$test = new Test(); // Constructor was called