资讯专栏INFORMATION COLUMN

其实你并不懂如何定义一个 PHP 函数

zero / 2492人阅读

摘要:让我们改变上面的函数定义现在,第二次调用这个函数将会抛出一个致命错误,指出其需要的参数必须是整数类型。可选参数仅接收类的实例参数在定义的时候,将可选参数或带默认值的参数作为最后一个参数。


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

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

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

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


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

only("name", "email");
}
在定义的时候,将可选参数或带默认值的参数作为最后一个参数。

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

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

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

函数与它们的返回值

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

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)参数,这意味着你可以定义一种可空参数类型。我们来看个例子:


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

总结

从我开启职业生涯的时候我就使用 PHP 了,我真的很爱这门语言。在过去很长一段时间里,它都是开发 web 应用的不二之选。现在 7.x 版本又填补了许多高级特性和现代化应用的需求,并且提高了开发者的效率。这门语言正不断的发生改变,找出这些变化,并停止过去的写法,放弃你原来的习惯并自豪的使用这些新特性,让你的代码更易读易懂。 Happy coding :)

更多现代化 PHP 知识,请前往 Laravel / PHP 知识社区

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28593.html

相关文章

  • PHP设计模式(八):工厂模式

    摘要:原文地址设计模式八工厂模式在设计模式七设计模式分类中我们提到过创建设计模式,创建设计模式专注于设计对象和实例的创建过程。工厂模式工厂模式,也是五种设计模式中唯一的类的设计模式,即在类中就能实现的设计模式。 原文地址:PHP设计模式(八):工厂模式 Introduction 在PHP设计模式(七):设计模式分类中我们提到过创建设计模式(Creation patterns),创建设计模式专...

    sorra 评论0 收藏0
  • 永强教你加解密:对称篇(一)

    摘要:大家好,我是永强,就是老李之前经常给你们说的区块链大神大学肄业却依然大公司主程一波儿流只生活在老李口中尚未真实露面的骗钱高手老王的左膀右臂赵永强。 大家好,我是永强,就是老李之前经常给你们说的区块链大神、大学肄业却依然大公司iOS主程一波儿流、只生活在老李口中尚未真实露面的骗钱高手、老王的左膀右臂 ——— 赵永强。我和尼古拉斯赵四之间并没有什么强关联,我只是单方面认识他而已。 之前老李...

    opengps 评论0 收藏0
  • [译]并不知道Node

    摘要:问题什么是调用栈并且它是的一部分么调用栈当然是的一部分。为什么理解是重要的因为你在每个进程中只能获取一个调用栈。它是一个从事件队列中跳去事件的循环并且将它们的回调压入到调用栈中。当调用栈为空的时候,事件循环可以决定下一步执行哪一个。 你并不知道Node 原文:You don’t know Node 译者:neal1991 welcome to star my articles-tra...

    miqt 评论0 收藏0
  • 体验javascript之美6:如果你觉得什么都会了或者不知道js学什么了看这里-面向对象编程

    摘要:面向过程函数式编程面向对象编程第二个并不是大家理解的那样,我们先说举个现实例子就明白了。多说一句函数是编程是非常强大也是我最喜欢的,以后再说,我们先说面向对象编程。 概述 当大家已经把js的语言基础理解了,然后能够写出一些简单的例子了,这个时候基本上达到了一年工作经验的水平,而自己能够独立的写一些小功能,完成一些小效果,或者临摹修改一些比较复杂的插件的时候差不多就是两年工作经验的水平,...

    changfeng1050 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<