首页 > 解决方案 > laravel 如何在静态方法中使用 $this 上下文?

问题描述

Laravel 如何在“routes”目录中的 console.php 文件中使用$this->comment()方法,而Artisan::command()是静态方法?

在此处输入图像描述

<?php

use Illuminate\Foundation\Inspiring;

Artisan::command('inspire', function() {
    $this->comment(Inspiring::(quote));
})->describe('Display an inspiring quote');

标签: phplaravelooplaravel-5static-methods

解决方案


$this不是在静态方法本身内部使用,而是在传递给该方法的闭包中使用。来自 Laravel 手册

闭包绑定到底层命令实例,因此您可以完全访问通常可以在完整命令类上访问的所有辅助方法。

所以$this在这个上下文中是一个 Command 实例。这是使用 PHP 的bindTo方法实现的,该方法允许您指定任何给定闭包的范围。


不过,这种方法并不是 Artisan 命令独有的。一般来说,我们称这个特性为Facades

外观为应用程序服务容器中可用的类提供“静态”接口。Laravel 附带了许多外观,它们提供了对 Laravel 几乎所有功能的访问。Laravel 外观充当服务容器中底层类的“静态代理”,提供简洁、富有表现力的语法的好处,同时保持比传统静态方法更多的可测试性和灵活性。

还有很多其他的门面,它们都提供对服务容器中实例的静态访问。一些更常见的门面和方法是:

  • Cache::get('key')Cache::set('key', 'value')
  • Request::input('some_field')Request::only('some_field')
  • Log::info('be aware of this...')
  • ...

推荐阅读