【php手册:类与对象】类型约束

类型约束

PHP 5 可以使用类型约束。

函数的参数可以指定必须为:

  • 对象(在函数原型里面指定类的名字)
  • 接口
  • 数组(PHP 5.1 )
  • callable(PHP 5.4 )

如果使用 NULL 作为参数的默认值,那么在调用函数的时候依然可以使用 NULL 作为实参。

如果一个类或接口指定了类型约束,则其所有的子类或实现也都如此。

类型约束不能用于标量类型如 int 或 string。Traits 也不允许。

Example #1 类型约束示例
<?php
//如下面的类
class MyClass
{
    /**
     * 测试函数
     * 第一个参数必须为 OtherClass 类的一个对象
     */
    public function test(OtherClass $otherclass) {
        echo $otherclass->var;
    }


    /**
     * 另一个测试函数
     * 第一个参数必须为数组 
     */
    public function test_array(array $input_array) {
        print_r($input_array);
    }


    /**
     * 第一个参数必须为递归类型
     */
    public function test_interface(Traversable $iterator) {
        echo get_class($iterator);  //获得
    }

    /**
     * 第一个参数必须为回调类型
     */
    public function test_callable(callable $callback, $data) {
        call_user_func($callback, $data);   //call_user_func:第一个参是被调用的回调函数,其余参数是回调函数的参数。
    }
}

// OtherClass 类定义
class OtherClass {
    public $var = 'Hello World';
}







// 两个类的对象
$myclass = new MyClass;
$otherclass = new OtherClass;

// 致命错误:第一个参数必须是 OtherClass 类的一个对象
// $myclass->test('hello');

// // 致命错误:第一个参数必须为 OtherClass 类的一个实例
// $foo = new stdClass;
// $myclass->test($foo);

// // 致命错误:第一个参数不能为 null
// $myclass->test(null);

// // 正确:输出 Hello World 
// $myclass->test($otherclass);

// // 致命错误:第一个参数必须为数组
// $myclass->test_array('a string');

// // 正确:输出数组
// $myclass->test_array(array('a', 'b', 'c'));

// // 正确:输出 ArrayObject
// $myclass->test_interface(new ArrayObject(array())); //ArrayObject : 类允许对象作为数组工作
// $obj = new ArrayObject();
// $myclass->test_interface($obj);

// // 正确:输出 int(1)
$myclass->test_callable('var_dump', 1);

类型约束不只是用在类的成员函数里,也能使用在函数里。

类型约束允许 NULL 值:

<?php

    /* 接受 NULL 值 */
    function test(stdClass $obj = NULL) {
        var_dump($obj);
    }

    test(NULL);  // NULL 
    test(new stdClass);  // object(stdClass)#1 (0) {}
阅读更多
版权声明:本文为ywcmoon原创文章,未经允许不得转载。 https://blog.csdn.net/qq_39251267/article/details/79963183
个人分类: php手册
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭