php - 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');
解决方案
$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...')
- ...
推荐阅读
- python - 我如何使用 Telebot 将 Web 脚本数据发送到电报中,因为我的代码只发送一个文本而不是十个
- airflow-scheduler - 如何使用不同的参数来调度 DAG
- r - R,如何根据箱过滤数据帧并获取每列未知长度的总和/计数?
- java - 使用 Java 将 .pages 转换为 .docx 或 .pdf
- powershell - Powershell 实现 Switch 语句
- macos - 如何在 macOS 上使用 GCC 运行 GitHub 操作?
- javascript - React 添加 .wasm 和 .data 文件
- r - 左加入 r 中的组
- amazon-s3 - 内容安全策略:仅允许我的 S3 存储桶
- javascript - 使用节点查询参数过滤 PostgresSQL 表