百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP函数类型声明总结
分享文章到:

PHP函数类型声明总结

发布时间:09/01 来源:未知 浏览: 关键词:
PHP7开端支撑标量类型声明,强类型说话的味道比力浓。使用这个特性的历程中踩过两次坑:一次是声明boolean类型参数,比来一次是声明double类型参数,都致使运转时出错。为幸免今后连续犯相似错误,这几天翻阅了官方文档。本文是看完后对PHP函数的类型声明使用做的总结。

从语法上,PHP的函数定义经过了几个时代:

远古时代(PHP 4)

定义一个函数非常的简便,使用 function name(args) {body}的语法声明。不克不及指定参数和返回值类型,参数和返回值类型有无穷种大概。这是到当前为止最常见的函数声明方式。

数组和援用类型参数值声明(PHP 5)

数组(array)、类(class)、接口(interface)、函数(callable)可以用在函数声明中。从5.6开端,支撑常量(包罗类常量)为默许参数,乃至参数数组(以省略号...为前缀)。例如:

function sum(...$numbers) {
    $sum = 0;
    foreach ($numbers as $number) {
        $sum += $number;
    }
    return $sum;
}

留意:假如参数的值大概为null,null必需为参数的默许值,不然调取时会出错。例如:

function foo(array $arr = null) {
    ...
}

标量类型和返回值声明(PHP 7)

函数正式支撑标量类型(int, bool, float,string)和返回值类型(可声明类型同参数)声明。从这个版本开端,除了语法差别,函数声明情势上可以做到像强类型说话。

遗憾是假如函数返回值有大概是null,就不克不及指定返回值类型。例如:

function getModel() : Foo {
    if ($this->_model === null) {
         $this->_model = xxxx;  // get from db or otherelse
    }
    return $this->_model;     // 假如$this->_model仍是null,运转出错
}

参数和返回值可为null乃至void返回类型声明(PHP 7.1)

当参数和返回值类型有大概是null时,类型前以问号(?)润饰,可以解决null值问题(与默许参数不冲突);类型声明新增iterable,同时还支撑void类型返回值。例如:

function getModel(?int $id) : ?Foo {
    if ($id !== null) {
        $this->_model = xxxx;
    } else {
        $this->_model = yyyy;
    }
    return $this->_model;
}
// 调取
$foo->getModel(null);
$foo->getModel(100);
// 函数声明了参数并且没有供给默许参数,调取时不传入参数会激发错误
// 将函数声明改成 getModel(?int $id = 100) {},可以不传参数
$foo->getModel();

当函数返回值为void时,函数体的不克不及return任何东西(return void;的写法也是错误的!),或者可以省略return语句。

function test(array $arr) : void {
    if (!count($arr) {
        return;
    }
    // 不要return;
    array_walk($arr, function ($elem) {xxxx});
}

回忆以上历史变动,可以看到在PHP 7.1中函数类型声明已经十分完美(虽然实践中用的不多)。留意,文章说的是参数和返回值类型声明,PHP不包管运转历程中参数类型不变,即下面的代码是合法的:

function foo(array $arr) : array {
    // change $arr from array to int
    $arr = 3;
    return [];
}

从这点上看,PHP还是弱类型说话,不克不及做静态编译。

再说说实践中踩到的坑。按照官方文档,函数参数和返回值类型声明可用的类型有:

● 类/接口

● self,只能用在本身的办法上

● array

● bool

● callable

● int

● float

● string

● iterable

● void(仅用在返回值)

留意列表中并没有boolean和double类型!除非你定义了这两个类型,不然用在参数和返回值中是错误的!

这也是PHP有点蛋疼的地方。平常使用时的double和float两个关键字几乎等同,例如doubleval是floatval的别号,is_double是is_float的别号,转换时用(double)和(float)结果雷同。但在用在类型声明就不一样,一样的状况显现在bool和boolean身上。

总结

当前PHP 7.2不乱版已经公布,倡议在新项目中尽量使用PHP 7.1及后续版本。为了写出清楚和可保护的代码,引荐声明类型。倡议援用类型或者string才使用null值,int/float等标量类型的参数尽量不要用null。func_get_argc等函数,如非必要,尽量不使用。

以上就是PHP函数类型声明总结的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板