Question

Could someone please explain the third line where Request and $request is used. It would be great if you could provide me a link having an explanation of the same? I just want to know what is happening there.

    <?php
       class xyz {
        public function foo(Request $request){
          //some code
        }
       }
Was it helpful?

Solution

Type hinting:

http://php.net/manual/en/language.oop5.typehinting.php

<?php
// An example class
class MyClass
{
    /**
     * A test function
     *
     * First parameter must be an object of type OtherClass
     */
    public function test(OtherClass $otherclass) {
        echo $otherclass->var;
    }


    /**
     * Another test function
     *
     * First parameter must be an array
     */
    public function test_array(array $input_array) {
        print_r($input_array);
    }
}

// Another example class
class OtherClass {
    public $var = 'Hello World';
}

It throws an error if the argument is not of the type specified:

<?php
// An instance of each class
$myclass = new MyClass;
$otherclass = new OtherClass;

// Fatal Error: Argument 1 must be an object of class OtherClass
$myclass->test('hello');

// Fatal Error: Argument 1 must be an instance of OtherClass
$foo = new stdClass;
$myclass->test($foo);

// Fatal Error: Argument 1 must not be null
$myclass->test(null);

// Works: Prints Hello World
$myclass->test($otherclass);

// Fatal Error: Argument 1 must be an array
$myclass->test_array('a string');

// Works: Prints the array
$myclass->test_array(array('a', 'b', 'c'));
?>

OTHER TIPS

An Object of the type Request is being passed to function foo.

It is made available to the function foo in a private variable named $request.

This is a type hint, to tell php to expect an object wich has

$request instanceof Request == true

Please note that this will actually not ensure anything. If $request is null or another object, there will most likely only a catchable fatal error be thrown, and so you have to test for a valid value anyway.

The third line defines a class method called foo that can get a $request argument of type "Request".

This is a security measure for the class developer. Determine that

<?php
    class User
    {
        private $username;

        public function get_username()
        {
            return $this->username;
        }
    }

    class xyz()
    {
        public function foo(User $currentUser)
        {
            $currentUser->get_username();
        }
    }

    $x = new xyz();

    $u = new User();
    $x->foo($u);           // That will not produce any error because we pass an Object argument of type User

    $name = "my_name";
    $x->foo($name);        // This will produce an error because we pass a wrong type of argument
?>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top