zoukankan      html  css  js  c++  java
  • PHP 标量类型与返回值类型声明

    标量类型声明

    默认情况下,所有的PHP文件都处于弱类型校验模式。

    PHP 7 增加了标量类型声明的特性,标量类型声明有两种模式:

    • 强制模式 (默认)
    • 严格模式

    标量类型声明语法格式:

    declare(strict_types=1); 
    

    代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。

    可以使用的类型参数有:

    • int

    • float

    • bool

    • string

    • interfaces

    • array

    • callable

    强制模式实例

    实例

    <?php 
    // 强制模式 
    function sum(int ...$ints) 

       return array_sum($ints); 


    print(sum(2, '3', 4.1)); 
    ?>

    以上程序执行输出结果为:

    9
    

    实例汇总将参数 4.1 转换为整数 4 后再相加。

    严格模式实例

    实例

    <?php 
    // 严格模式 
    declare(strict_types=1); 

    function sum(int ...$ints) 

       return array_sum($ints); 


    print(sum(2, '3', 4.1)); 
    ?>

    以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:

    PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……
    

    返回类型声明

    PHP 7 增加了对返回类型声明的支持,返回类型声明指明了函数返回值的类型。

    可以声明的返回类型有:

    • int

    • float

    • bool

    • string

    • interfaces

    • array

    • callable

    返回类型声明实例

    实例中,要求返回结果为整数:

    实例

    <?php 
    declare(strict_types=1); 

    function returnIntValue(int $value): int 

       return $value; 


    print(returnIntValue(5)); 
    ?>

    以上程序执行输出结果为:

    5
    

    返回类型声明错误实例

    实例

    <?php 
    declare(strict_types=1); 

    function returnIntValue(int $value): int 

       return $value + 1.0; 


    print(returnIntValue(5)); 
    ?>

    以上程序由于采用了严格模式,返回值必须是 int,但是计算结果是float,所以会报错,执行输出结果为:

    Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...
    

    void 函数

    一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,NULL 不是一个合法的返回值。

    返回的类型还有 void,定义返回类型为 void 的函数不能有返回值,即使返回 null 也不行。

    void 函数可以省去 return 语句,或者使用一个空的 return 语句。

    实例

    <?php
    function swap(&$left, &$right) : void
    {
        if ($left === $right) {
            return;
        }

        $tmp = $left;
        $left = $right;
        $right = $tmp;
    }

    $a = 1;
    $b = 2;
    var_dump(swap($a, $b), $a, $b);

    以上实例输出结果:

    null
    int(2)
    int(1)
  • 相关阅读:
    10分钟学会SpringBoot入门
    单链表常见的4道笔试题(Java版)
    Java面试、跳槽必刷200+真面试题,让你披荆斩棘走进大厂
    金三银四JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
    最新整理的spring面试题从基础到高级,干货满满
    面试阿里百分百问的Jvm,别问有没有必要学,真的很有必要朋友
    面试官:你们前后端分离的接口规范是什么?
    “金九银十”已过,总结我的天猫、蚂蚁、头条面试经历(Java岗)
    350道面试题分享,拿下京东offer工资double
    2019大厂Java岗面试题全曝光,刷完这1020道,金三银四大厂等你
  • 原文地址:https://www.cnblogs.com/yc10086/p/12863221.html
Copyright © 2011-2022 走看看