浅谈定义一个PHP函数

目录
  • 概述
  • 函数参数与它们的数据类型
  • 函数与它们的返回值
  • 可选参数 VS 可空参数

概述

<?php
function divide($dividend, $divisor){
    return $dividend / $divisor;
}
echo divide(12, 4);
echo divide('sa', 'sd');

这段代码乍一看没毛病,但是如果你向它传递「任意」参数,它就会出问题。

写出好的代码是一个学无止境的过程。让我们来改进我们编写 PHP 函数的方式。 看下上面的代码,想想第二个函数调用那里会发生什么情况? 它会接受你输入的任何参数,并且尝试执行然后抛出一个数学错误。 但是我们怎么才能让一个函数严格接收能使其正确执行的参数呢? 现代的 PHP 解决了这个问题,并且有更多妙法能让你的代码质量更进一层,没有 bug。

函数参数与它们的数据类型

你可以严格控制你的函数,使其只接收让它正确运行的参数。让我们改变上面的函数定义:

<?php
function divide(int $dividend, int $divisor){
    return $dividend / $divisor;
}
echo divide(12, 4);
echo divide('sa', 'sd');

现在,第二次调用这个函数将会抛出一个致命错误,指出其需要的参数必须是整数类型。你可以用不同的方式处理参数。

<?php
// 可选参数
function getName(string $firstName, string $lastName = ''){
    return $firstName . ' ' . $lastName;
}
echo getName('Muhammad', 'Nauman'); // Muhammad Nauman
echo getName('Adam'); // Adam
function divide(int $dividend, int $divisor = 2){
      return $dividend / $divisor;
}
echo divide(12, 4); // 3
echo divide(12); // 6
// 仅接收 Request 类的实例参数 $request
function getReuestParams(Request $request){
    return $request->only('name', 'email');
}

在定义的时候,将可选参数或带默认值的参数作为最后一个参数。

PHP 7.1 也给可迭代数据介绍了一种伪类型。它能接收任何可迭代的数据。

上图是使用了iterable数据类型的函数。

现在通过代码,我们可以控制的更多了,不是吗?没错,确实如此!

函数与它们的返回值

正如你可以控制传递给指定函数的参数类型一样,你也可以控制函数的返回值类型。它能确保你的函数总是返回同一个数据类型,并且不会崩溃。我们改变一下上面的代码:

<?php
// 可选参数
function getName(string $firstName, string $lastName = '') : string {
    return $firstName . ' ' . $lastName;
}
echo getName('Muhammad', 'Nauman'); // Muhammad Nauman
echo getName('Adam'); // Adam
function divide(int $dividend, int $divisor = 2) : int {
      return $dividend / $divisor;
}
echo divide(12, 4); // 3
echo divide(12); // 6
// 仅接收 Request 类的实例 $request 作为参数
function getReuestParams(Request $request) : array {
    return $request->only('name', 'email');
}
// 返回 void 类型
$attribute = 2;
function changeAttribute(string &$param, $value) : void {
    $param = $value;
}
changeAttribute($attribute, 5);
echo $attribute; // 5

PHP 逐渐引入了这些功能,如:5.1 版引入的数组类型作为参数,5.4 版引入的可调用类型(callable type),以及 7.1 版引入的 void 返回类型等。

可选参数 VS 可空参数

除了可选参数外,你还可以定义可空(nullable)参数,这意味着你可以定义一种可空参数类型。我们来看个例子:

<?php
function nullableParameter(?string $name)
{
    return $name;
}
echo nullableParameter(null); // 不会返回任何东西
echo nullableParameter('Nauman'); // Nauman
echo nullableParameter(); // 致命错误
function nullableParameterWithReturnType(?string $name) : string
{
    return $name;
}
echo nullableParameter(null); // 致命错误,必须返回 string 类型
echo nullableParameter('Nauman'); // Nauman
function nullableReturnType(string $name) : ?string
{
    return $name;
}
echo nullableParameter(null); // 致命错误,$name 应该是 string 类型
echo nullableParameter('Nauman'); // Nauman

显然,可空参数不是可选参数,你必须传递一个值或者是null。我个人喜欢使用空值作为可选参数,但这取决于你的任务需求。

以上就是浅谈定义一个PHP函数的详细内容,更多关于定义一个PHP函数的资料请关注我们其它相关文章!

(0)

相关推荐

  • php中rsort函数实例用法

    在讲到升序的数组方法后,那么对应的就会出现降序的方法.在我们正式揭晓方法之前,大家已经学习了sort函数的用法,那么对应的降序函数名称就是rsort() .两个函数在结构语法上都非常相似,下面我们就rsort() 函数的概念.语法.返回值.降序实例带来介绍,具体使用方法如下. 1.概念 rsort() 函数行为与 sort() 相反,对数组单元进行由高到低排序. 注意: 如果数组元素是数字,则根据数字排序:如果数组元素是字符串,则根据字母排序:如果数组包含数字值和文本/字符串,则根据字母排序.

  • 详解各种PHP函数漏洞

    1.MD5 compare漏洞 PHP在处理哈希字符串时,会利用"!="或"=="来对哈希值进行比较,它把每一个以"0E"开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以"0E"开头的,那么PHP将会认为他们相同,都是0. 常见的payload有 0x01 md5(str) QNKCDZO 240610708 s878926199a s155964671a s214587387a s214587387

  • PHP之header函数详解

    PHP的header函数是最常用的函数之一,用于向客户端发送HTTP头信息. 通过的用法如设置编码.发送HTTP状态值以及重定向. php header utf8 : header("Content-type: text/html; charset=utf-8″); php header 404 : header("HTTP/1.0 404 Not Found"); 上述两个例子分别是设置UTF8编码和发送404状态. header重定向: header('Location:

  • php中sort函数排序知识点总结

    在我们进行排序的时候,难免要用到一些函数来执行.php中排序函数有很多种,就拿sort函数来说,在排序的作用发挥上是从低到高,这点是大家要注意的,也算是符合我们生活中的排序习惯.下面我们就php中sort函数的概念.语法.返回值.实例分别带来介绍,一起来体会下它的排序使用吧. 1.概念 用于对数组单元从低到高进行排序. 注意:本函数会为排序的数组中的单元赋予新的键名,这将删除原有的键名而不仅是重新排序. 2.语法 sort(array,sortingtype); 3.返回值 如果成功则返回 TR

  • PHP的imageTtfText()函数深入详解

    图片处理,是许多程序的功能之一:而文字渲染则是绘图的基本组成部分.PHP通过很多扩展库来支持图片的处理,最常用的还是GD库,通过一系列imagexxx()函数来提供绘图功能.本文专注于非常细小的一点:绘制文字.熟悉Win32的人都知道,TextOut()就可以轻松显示任何文字了,然而到了PHP的世界里,有些事情并不轻松. 1 详细解释imageTtfText()函数 对于PHP绘图初学者,首先遇到的一个问题就是,imageString()这个函数并不支持汉字的绘制.这往往会给入门者当头一棒,不过

  • PHP中垃圾回收相关函数的使用

    之前我们已经学习过 PHP 中的引用计数以及垃圾回收机制的概念.这些内容非常偏理论,也是非常常见的面试内容.而今天介绍的则是具体的关于垃圾回收的一些功能函数.关于之前的两篇介绍文章,大家可以到文章底部查看. 再谈循环引用以及强制清理循环引用 我们为什么要强调 "循环引用" 呢?其实,在默认情况下,我们直接 unset() 掉一个没有被其他变量引用的变量时,就会让这个变量的引用计数变为0.这时,PHP 默认的垃圾回收机制就会直接清除掉这个变量.比如: $a = new stdClass;

  • PHP中断言函数的使用详解

    原来一直以为断言相关的函数是 PHPUnit 这些单元测试组件提供的,在阅读手册后才发现,这个 assert() 断言函数是 PHP 本身就自带的一个函数.也就是说,我们在代码中进行简单的测试的时候是不需要完全引入整个单元测试组件的. assert() 断言函数 assert(1==1); assert(1==2); // assert.exception = 0 时,Warning: assert(): assert(1 == 2) // assert.exception = 1 时,Fata

  • PHP的命令行扩展Readline相关函数的使用

    readline 扩展函数实现了访问 GNU Readline 库的接口.这些函数提供了可编辑的命令行.一个例子是在 Bash 中允许你使用箭头按键来插入字符或者翻看历史命令.因为这个库的交互特性,这个功能在你写的 Web 程序中没多大用处,但是当你写的脚本被用在命令行中时非常有用. Readline 扩展的安装 Readline 扩展已经加入了 PHP 的官方安装包中,如果是新的 PHP 环境,那么在编译的时候加上 --with-readline 即可.另外,我们还需要安装操作系统的 Read

  • PHP危险函数禁用深入详解

    error_log() 功能描述:将错误信息发送到指定位置(文件).  安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode, 执行任意命令.  危险等级:低 phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块.WEB 环境等信息.  危险等级:中 scandir()  功能描述:列出指定路径中的文件和目录.  禁用建议:不建议禁用,因为thinkphp框架需要调用. 危险等级:中 syslog()  功能描述:可调用 UNIX 系

  • PHP执行系统命令函数实例讲解

    命令注入 命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段. 常见的执行系统命令的函数有 system() passthru() exec() shell_exec() popen() proc_open() pcntl_exec() system()函数 string system ( string $command [, int &$return_var ] ) $comm

随机推荐