加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP各版本中函数的范例声明详解

发布时间:2021-04-02 06:03:21 所属栏目:编程 来源:网络整理
导读:PHP7开始支持标量范例声明,强范例说话的味道较量浓。行使这个特征的进程中踩过两次坑:一次是声明boolean,最近是声明double。为停止往后继承犯相同错误,就把官方文档翻了一次。本文是看完后对PHP函数的范例声明行使做的一次总结。 从语法上,PHP的函数定

PHP7开始支持标量范例声明,强范例说话的味道较量浓。行使这个特征的进程中踩过两次坑:一次是声明boolean,最近是声明double。为停止往后继承犯相同错误,就把官方文档翻了一次。本文是看完后对PHP函数的范例声明行使做的一次总结。

从语法上,PHP的函数界说颠末尾几个时期:

太古期间(PHP 4)

界说一个函数很是的简朴,行使 function name(args) {body} 的语法声明。不能指定参数和返回值范例,参数和返回值范例有无穷种也许。这是到今朝为止最常见的函数声明方法。

数组和引用范例参数值声明(PHP 5)

数组(array)、类(class)、接口(interface)、函数(callable)可以用在函数声明中。从5.6开始,支持常量(包罗类常量)为默认参数,以及参数数组(以省略号…为前缀)。譬喻:

留意:假如参数的值也许为null,null必需为参数的默认值,不然挪用时会堕落。譬喻:

标量范例和返回值声明(PHP 7)

函数正式支持标量范例(int,bool,float等)和返回值范例(可声明范例同参数)声明。从这个版本开始,写PHP有像写java的感受。

遗憾是假如函数返回值有也许是null,就不能指定返回值范例。譬喻:

_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范例返回值。譬喻:

_model = xxxx; } else { $this->_model = yyyy; } return $this->_model; }

// 挪用
$foo->getModel(null);
$foo->getModel(100);

// 函数声明白参数而且没有提供默认参数,挪用时不传入参数会激发错误
// 将函数声明改成 getModel(?int $id = 100) {},可以不传参数
$foo->getModel();

当函数返回值为void时,函数体的return后不能接任何范例,可能不呈现return语句。

array_walk($arr,function ($elem) {xxxx});
}

回首完以上汗青,可以看出到PHP 7.1,函数范例声明已经异常完美(固然实践顶用的不多)。

再说说实践中踩到的坑。参数和返回值范例声明可用的范例有:

  1. 类/接口
  2. self,只能用在自身的要领上
  3. array
  4. bool
  5. callable
  6. int
  7. float
  8. string
  9. iterable

留意列表中并没有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等函数,如非须要,只管不行使。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读