美文网首页
PHP 类型约束

PHP 类型约束

作者: haoyq | 来源:发表于2018-12-17 11:58 被阅读0次

导语

所谓类型约束,即定义一个变量的时候,必须指定其类型,并且以后该变量也只能存储该类型数据。PHP 虽然是弱类型语言,但是在 PHP 5 已经支持类型约束,包括对象、接口、数组,在 PHP 7 之后支持标量类型约束,下面简单写几个示例。

标量类型、数组

在参数中指明类型,如果不一致,会抛出一个可捕获的致命错误

<?php

/**
 * 数组类型约束
 * @param array $arr
 */
function printArray(array $arr)
{
    echo implode(',', $arr);
}

printArray(array(1, 2, 3));// 1,2,3
printArray('1');// Fatal error: Uncaught TypeError: Argument 1 passed to printArray() must be of the type array, string given, called in D:\WWW\test.php on line 13 and defined in D:\WWW\test.php:7 Stack trace: #0 D:\WWW\test.php(13): printArray('1') #1 {main} thrown in D:\WWW\test.php on line 7

如上所示,标量类型也是如此

<?php

/**
 * 标量类型约束
 * @param string $name
 * @param int $age
 * @param float $height
 * @param bool $isBoy
 */
function sayInfo(string $name, int $age, float $height, bool $isBoy)
{
    echo '姓名:' . $name . ',年龄:' . $age . ',身高:' . $height . ',是否为男孩:' . ($isBoy ? '是' : '否');
}

sayInfo('tom', 12, 134.5, true);// 姓名:tom,年龄:12,身高:134.5,是否为男孩:是

对象、接口

类型约束也可以指定为对象或者接口。首先定义一个 Human 接口,BoyGirl 两个类分别实现接口

<?php

/**
 * 接口
 * Interface Human
 */
interface Human
{
    public function say();

    public function run();
}

/**
 * 实现 Human 接口
 * Class Boy
 */
class Boy implements Human
{
    public function say()
    {
        echo 'a boy say';
    }

    public function run()
    {
        echo 'a boy run';
    }
}

/**
 * 实现 Human 接口
 * Class Girl
 */
class Girl implements Human
{
    public function say()
    {
        echo 'a girl say';
    }

    public function run()
    {
        echo 'a girl run';
    }
}

接下来新建一个类来测试

<?php

include './human.php';

class Action
{
    /**
     * Boy 对象类型约束
     * @param Boy $boy
     */
    public function boySay(Boy $boy)
    {
        $boy->say();
    }

    /**
     * Girl 对象类型约束
     * @param Girl $girl
     */
    public function girlSay(Girl $girl)
    {
        $girl->say();
    }

    /**
     * Human 接口类型约束
     * @param Human $obj
     */
    public function humanRun(Human $obj)
    {
        $obj->run();
    }
}

$obj = new Action();
$obj->boySay(new Boy());// a boy say
echo '<br />';
$obj->girlSay(new Girl());// a girl say
echo '<br />';
$obj->humanRun(new Boy());// a boy run
echo '<br />';
$obj->humanRun(new Girl());// a girl run

当类型约束为具体对象 Boy 或者 Girl 时,只能传入要求的对象。当类型约束为接口 Human 时,可以传入实现接口的类 BoyGirl


参考资料:PHP 5 类型约束PHP 7 标量类型声明

相关文章

  • PHP 类型约束

    导语 所谓类型约束,即定义一个变量的时候,必须指定其类型,并且以后该变量也只能存储该类型数据。PHP 虽然是弱类型...

  • php版本进化

    以下只是简单记录:PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束PHP5.2:JSO...

  • PHP版本概述

    PHP 8于2020年11月26日正式发布。 PHP 5.* 版本新特性 5.2.*以前:类型约束,autoloa...

  • PHP7——及以上版本新特性简析

    指定参数类型(7以前就有)、可变参数个数、返回类型: 参数类型约束 以前版本的PHP,函数和类方法不需要声明变量类...

  • PHP学习线路图

    PHP教程 PHP教程PHP简介PHP环境设置PHP语法概述PHP变量类型PHP常量类型 PHP运算符类型PHP ...

  • PHP中的数据转换、类型约束

    数据转换 转换基本语法:(目标类型)数据; 对象转换为对象:没有变化 数组转换为对象:数组的键名当作属性名,值为对...

  • 类型约束

    1、遇到问题 今天学到函数强类型参数,在尝试编译时,却总是报错。 编译的代码 编译出现的错误如下 Catchabl...

  • 约束类型

    目的: 由于生活中需要避免重名的情况,所以数据库中某列使用完整性约束来限定此类要求。 用于保证数据的完整性和一致性...

  • PHP学习线路图 PHP教程

    PHP学习线路图 PHP教程 PHP教程PHP简介PHP环境设置PHP语法概述PHP变量类型PHP常量类型 PHP...

  • Swift 5.x 为泛型定义要求

    如类型约束中描述的一样, 类型约束允许你在泛型函数或泛型类型相关的类型形式参数上定义要求. 类型约束在为关联类型定...

网友评论

      本文标题:PHP 类型约束

      本文链接:https://www.haomeiwen.com/subject/awtfkqtx.html