旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

PHP函数范例声明总结【php教程】,PHP函数

作者:搜教程发布时间:2019-12-01分类:PHP教程浏览:17评论:0


导读:PHP7最先支撑标量范例声明,强范例言语的滋味比较浓。运用这个特征的过程当中踩过两次坑:一次是声明boolean范例参数,近来一次是声明double范例参数,都致使运转时失足。为防...
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函数范例声明总结的细致内容,更多请关注ki4网别的相干文章!

标签:PHP函数


欢迎 发表评论: