类与对象
PHP Manual

类型约束

PHP 5 可以使用类型约束。函数的参数可以指定只能为对象(在函数原型里面指定类的名字),php 5.1 之后也可以指定只能为数组。 注意,即使使用了类型约束,如果使用NULL作为参数的默认值,那么在调用函数的时候依然可以使用NULL作为实参。

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

//另外一个类
class OtherClass {
    public 
$var 'Hello World';
}
?>

函数调用的参数与定义的参数类型不一致时,会抛出一个致命错误。

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

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

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

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

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

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

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

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

<?php
// 如下面的类
class MyClass {
    public 
$var 'Hello World';
}

/**
 * 测试函数
 * 第一个参数必须是类MyClass的一个对象
 */
function MyFunction (MyClass $foo) {
    echo 
$foo->var;
}

// 正确
$myclass = new MyClass;
MyFunction($myclass);
?>

类型约束允许NULL值:

<?php

/* 接受NULL值 */
function test(stdClass $obj NULL) {

}

test(NULL);
test(new stdClass);

?>

类型约束只支持对象数组(php 5.1之后)两种类型。而不支持整型字符串类型。


类与对象
PHP Manual