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

7人阅读 评论(0) 收藏 举报
分类:

类型约束

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) {}
查看评论

JavaOne现场报道(6月11日)

没有了摩肩接踵的拥挤人群,没有了媒体的爆炒,没有了树上掉金币的神话,Java One在略显冷清的同时也回归了技术会议的本质。本次Java One大会最重要的主题就是“Java未来的发展方向”,Sun对...
  • gigix
  • gigix
  • 2003-06-12 10:25:00
  • 2042

PHP之类型约束

在强类型语言中,类型约束是语法上的要求,即定义一个变量的时候,必须指定类型,并以后也只能存储该类型数据; php是弱类型,其特点是无需为变量指定类型,而且在其后也可以存储任何类型,不过在ph...
  • xuandaijian
  • xuandaijian
  • 2016-02-25 21:00:34
  • 1188

php类型约束

众所周知,在强类型语言中,类型约束是语法上的要求,即:定义一个变量的时候,必须指定其类型,并且以后该变量也只能储存该类型的数据。 而PHP是弱类型语言,其特点就是无需为变量指定类型,而且在其后也可以...
  • forLightWay
  • forLightWay
  • 2017-01-17 15:37:17
  • 373

PHP面向对象_类型约束

什么是类型约束  就是要求某个变量只能使用(接受,存储)某种指定的数据类型;php属于”弱类型语言“,通常不支持类型约束;相应的,强类型语言,类型约束却是其“基本特征”。php中,只支持局部的部分类型...
  • Yeoman92
  • Yeoman92
  • 2016-10-18 14:30:19
  • 624

PHP面向对象编程详解:类和对象

PHP面向对象编程详解:类和对象 从OOP的视角看,不应区分语言。无论是C++、无论是Java、无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便可以跨越语言,让你的思...
  • hello_katty
  • hello_katty
  • 2015-06-17 07:40:24
  • 2863

PHP的类和对象(四)访问控制和继承

访问控制   对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为...
  • L1837435964
  • L1837435964
  • 2016-09-29 14:45:16
  • 166

PHP之有关类和对象的系统函数与运算符

系统函数class_exists() 判断某个类是否存在 interface_exists() 判断接口是否存在 get_class() 获取某个对象所处的类名 get_parent_class...
  • xuandaijian
  • xuandaijian
  • 2016-02-29 21:26:06
  • 660

PHP类型约束

  • yeziyezi1986
  • yeziyezi1986
  • 2018-02-07 14:09:57
  • 24

【php手册:类与对象】匿名类

匿名类 PHP 7 开始支持匿名类。 作用:创建一次性的简单对象 可以传递参数到匿名类的构造器,也可以扩展(extend)其他类、实现接口(implement interface),以及像其他普...
  • qq_39251267
  • qq_39251267
  • 2018-04-12 15:29:44
  • 5
    个人资料
    持之以恒
    等级:
    访问量: 8024
    积分: 1137
    排名: 4万+
    文章存档