Container::getAlias($abstract) 抛出 ErrorException: 当 $abstract 中没有 $this->aliases[] 时,isset 中的偏移类型非法或为空

use*_*048 5 laravel laravel-5.6

  • Laravel 版本:5.6.16
  • PHP 版本:7.2.3
  • 数据库驱动程序和版本:不适用

描述:

laravel\framework\src\Illuminate\Container\Container.php 公共函数 getAlias($abstract) 抛出 ErrorException: 当 $abstract 中没有 $this->aliases[] 时, isset 中的非法偏移类型或为空

$this->aliases[$abstract] 为 null 并且 !isset($this->aliases[$abstract]) 抛出 ErrorException: Illegal offset type inisset or empty

$abstract 值是 Modules\Administration\Tests\Commands\StubJsonCommandHandler

重现步骤:

运行 AdministrationControllerTest ( https://github.com/proyectotau/TAU/克隆 laraveldusk 分支 [4ef9b0e124657abed7afde0969f332bf7be95a8b])

这是一个错误还是我有任何错误?提前致谢!

use*_*048 0

解决方法

getAlias() 函数的更改 ! isset($this->aliases[$abstract])! isset($this->aliases[(string)$abstract])

或者将类型提示显式更改为stringat ALL 函数( 还 @param string不够) public function getAlias($abstract)public function getAlias(string $abstract)

isShared() at isset($this->instances[(string)$abstract]) isset($this->bindings[(string)$abstract] resolve() calling to$this->resolved[(string)$abstract] = true; getConcrete() at if (isset($this->bindings[(string)$abstract])) getContextualConcrete() at if (empty($this->abstractAliases[(string)$abstract])) getExtenders() at if (isset($this->extenders[(string)$abstract])) 但稍后在 Container:和 Illuminate\Foundation\Application 中 下次使用 [$abstract] 时会失败 : make() at if (isset($this->deferredServices[(string)$abstract]) && ! isset($this->instances[(string)$abstract]))

PS:请查看 Alvaro Gonzalez 在 php 中的评论 - 如何修复此非法偏移类型错误