今天在LaminasSlack,有人问是否有Laravel的TinkerREPL的等价物。简短的回答是“没有”,但我有一个建议给他们。
PHP回复
我对这个问题的回答的第一部分是建议他们使用PHPREPL。
PHP从5.1.0版本开始就有了一个REPL,你可以使用php-a
来调用它。一旦你开始,你就可以做任何你通常在PHP中做的事情,包括这样的包括文件、声明命名空间、声明类等。
我经常想测试类是如何工作的,或者在不编写脚本的情况下运行一次性作业。为了完成这些任务,我将包括由Composer安装的自动加载器:
$ php -a php > include './vendor/autoload.php';
完成后,我可以引用Composer自动加载的任何类、函数和常量,以及PHP公开的任何内容。
Mezzio容器
Mezzio框架在其config/
子目录中设置了一些文件,为我们提供了许多现成可用的工件。
第一个是config/config.php
,它聚合并返回所有应用程序配置,包括来自配置提供者的配置以及本地自动加载的配置文件(那些在config/autload/)。从REPL中,如果需要,您可以直接转储此信息:
$ php -a php > include './vendor/autoload.php'; // we need autoloading for most config providers php > $config = include './config/config.php'; php > var_export($config);
第二个对本练习更重要的是config/container.php
。此文件自动加载、配置并返回应用程序中定义的PSR-11DI容器。通过使用这种方法,我们可以让Mezzio不知道所使用的特定容器,并将其留给该文件为我们正确实例化和配置它。我们为许多容器提供该文件的开箱即用版本,并有一个规范对于我们推荐的依赖配置,以确保可以检测和利用第三方包提供的依赖配置。
因为这只是一个PHP文件,并返回PSR-11容器,我们可以包含它并将其捕获到REPL中的一个变量中:
$ php -a php > include './vendor/autoload.php'; php > $container = include './config/container.php';
然后,您可以从那里提取任何配置的服务,包括配置,并开始与它们交互:
php > include './vendor/autoload.php'; php > $container = include './config/container.php'; php > $config = $container->get('config'); php > echo $config['debug'] ? 'In debug mode' : 'In production mode'; php > $httpClient = $container->get(Http\Adapter\Guzzle7\Client::class);
鳍
虽然不如Tinker强大,但PHPREPL与Composer自动加载和配置的PSR-11容器相结合,是与您的项目交互的绝佳工具。我绝对可以推荐它作为一种体验和试验的方式使用您的应用程序代码!