# Laravel Magic

If you are new to Laravel or any framework, You may be confused and sometimes when you start learning you may find some built-in classes or functions that you don't know where it comes from and sometimes you are saying It's a magic trick.

So, I will give you one Example of Laravel Magic.

In the following Image I created a simple command that count the user in Database and you can find that we used DB Class from `Illuminate\Support\Facades`

```php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class MagicTrick extends Command
{
    protected $signature = 'magic:run';

    protected $description = 'Show a magic trick';

    public function handle()
    {
        $usersCount = DB::table('users')->count();
        $this->info("Users count: $usersCount");
    }
}
```

And when we run it.

```bash
php artisan magic:run
```

We will find that.

`Users count: 1`

Till now its fine but what about if we removed this line `use Illuminate\Support\Facades\DB;`

```php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MagicTrick extends Command
{
    protected $signature = 'magic:run';

    protected $description = 'Show a magic trick';

    public function handle()
    {
        $usersCount = \DB::table('users')->count();
        $this->info("Users count: $usersCount");
    }
}
```

We will get the same result.

### So How it works?

Laravel behind the scene uses class alias.

Let Me explain it in a simple way. For Example create a simple Enum Class

```php
<?php

namespace App\Enums;

enum Gender: string
{
    case MALE = 'M';
    case FEMALE = 'F';
}
```

Then get back to the command

```php
<?php

namespace App\Console\Commands;

use App\Enums\Gender;
use Illuminate\Console\Command;

class MagicTrick extends Command
{
    protected $signature = 'magic:run';

    protected $description = 'Show a magic trick';

    public function handle()
    {
        $this->info('Male Enum value: ' . Gender::MALE->value);
    }
}
```

Then when we run we will get `Male Enum value: M.`

What will happen if we remove `use App\Enums\Gender;`

We will get an error `Class "App\Console\Commands\Gender" not found`

So if we want to use a magic here simply we can use a simple PHP function `class_alias()`

```php
class_alias('App\Enums\Gender', 'Gender');
```

You can simply put the above snippet into your service provider to use the alias anywhere in your project

Your final code in command will be:

```php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MagicTrick extends Command
{
    protected $signature = 'magic:run';

    protected $description = 'Show a magic trick';

    public function handle()
    {
        $this->info('Male Enum value: ' . \Gender::MALE->value);
    }
}
```

Finally you can check the following link of **Mohamed Said** to learn more about Laravel magic tricks  
[Laravel Magic Tricks](https://laracasts.com/series/demystifying-laravel-magic)
