Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP - difference of use keyword outside of class and use keyword inside of a class

Tags:

php

laravel

Good day guys!

Just want to ask the difference of use outise the class and use inside the class ? I have also googled it, but my question doesnt match an answer.

Example:

namespace App\Http\Controllers\Auth;

use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Auth;
use Illuminate\Http\Request;

class AuthController extends Controller
{

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected $redirectTo = '/';

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {
       // Some Code
    }
like image 832
Mr. J Avatar asked Apr 04 '17 02:04

Mr. J


People also ask

What is the use of use keyword in PHP?

The use keyword has two purposes: it tells a class to inherit a trait and it gives an alias to a namespace.

What is the difference between namespace and use in laravel?

The use keyword allows the developers to shorten the namespace. The namespace once created can include various functionalities which can be used in controllers and various classes.

What is use keyword in laravel?

Namespaces in Laravel are defined as a class of elements in which each element has a different name to that associated class. The use keyword allows us to shorten the namespace.


1 Answers

When you define a class, it can only have access to other classes within its namespaces. Your controller for instance is defined within the following namespace.

namespace App\Http\Controllers\Auth;

So to use other classes, you need to import them from their own namespaces so you can access them. e.g.:

use Illuminate\Foundation\Auth\ThrottlesLogins;

If you have javascript ES6 experience, it's a little bit similar to import. When you import a package, the default namespace is /node_modules. To import your own files, you need to sort of namespace them by giving the file location like

import '../containers/index.js'

Back to Laravel. Now that you have imported the ThrottlesLogins, which is actually a trait, now inside the class you use it to expose all of the methods inside.

use Illuminate\Foundation\Auth\ThrottlesLogins; //import
public class AuthController
{
    use ThrottlesLogins; //exposes all the methods inside
    ...

    public function login()
    {
        ...
        //login failed 
        $this->incrementLoginAttempts(); //defined in ThrottlesLogins Trait
    }
}

From the example above, you have direct access to incrementLoginAttempts(), which is defined the ThrottlesLogins.

like image 121
EddyTheDove Avatar answered Nov 03 '22 04:11

EddyTheDove