Что происходит в этом блоке кода во время php oop? - PullRequest
0 голосов
/ 17 октября 2011

Может кто-нибудь объяснить третью строку, где используются запрос и $ запрос. Было бы здорово, если бы вы могли предоставить мне ссылку с объяснением того же самого? Я просто хочу знать, что там происходит.

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

Ответы [ 5 ]

2 голосов
/ 17 октября 2011
2 голосов
/ 17 октября 2011

Тип подсказки:

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';
}

Выдает ошибку, если аргумент не указанного типа:

<?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'));
?>
0 голосов
/ 17 октября 2011

Это подсказка типа , которая сообщает php, что объект, который имеет

$request instanceof Request == true

Обратите внимание, что на самом деле не гарантирует что-либо.Если $ request равен null или другому объекту, то, скорее всего, будет выдано только перехватываемая фатальная ошибка , поэтому вам все равно придется проверять допустимое значение.

0 голосов
/ 17 октября 2011

Третья строка определяет метод класса с именем foo, который может получить аргумент $request типа «Запрос».

Это мера безопасности для разработчика класса.Определите, что

<?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
?>
0 голосов
/ 17 октября 2011

Объект типа Request передается в функцию foo.

Доступно для функции foo в закрытой переменной с именем $request.

...