Skip to content
Advertisement

Can’t understand a logic of Object And Array in php

If I write this line on routes/web.php file

dd( app()['config']["auth.guards.web"] );

It outputs this:

array:2 [▼
  "driver" => "session"
  "provider" => "users"
]

That’s cool, but my question is since app()['config'] returns an object so how this ["auth.guards.web"]works? Even there is no index with that name!

Outside of Laravel I tried to write a class named Test so that it returns the same output but I got an error! Which is,

Fatal error: Uncaught Error: Cannot use object of type Test as array 

Can anyone explain it with core php?

Advertisement

Answer

Laravel contains a very useful helper function called Arr::get() which retrieves a value from a deeply nested array using “dot” notation. Laravel framework uses this helper function everywhere it needs to get the values inside a deep array; e.g configs and translation and so on.

Example;

config('database.driver');
__('validation.error');
trans('validation.error');

On the other hand, app()['config'] returns IlluminateConfigRepository instance which implements ArrayAccess. As long as get method of IlluminateConfigRepository class uses Arr::get method, you can use “dot” notated array access along with app()['config'].

For more details, see these links; https://laravel.com/docs/8.x/helpers#method-array-get https://github.com/laravel/framework/blob/8.x/src/Illuminate/Config/Repository.php#L53

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement