这个代码块在php oop期间会发生什么?

时间:2011-10-17 10:07:23

标签: php oop type-hinting

有人可以解释使用Request和$ request的第三行。如果你能给我一个解释相同的链接,那会很棒吗?我只是想知道那里发生了什么。

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

5 个答案:

答案 0 :(得分:2)

类型提示:

  

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'));
?>

答案 1 :(得分:2)

答案 2 :(得分:0)

Request类型的对象传递给函数foo

在名为foo的私有变量中,函数$request可用。

答案 3 :(得分:0)

第三行定义了一个名为foo的类方法,它可以获得类型为“Request”的$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
?>

答案 4 :(得分:0)

这是type hint,告诉php期望有一个

的对象
$request instanceof Request == true

请注意,这实际上确保任何事情。如果$ request为null或其他对象,则很可能只会抛出可捕获致命错误,因此您必须测试有效值。