查看: 73967|回复: 43972
打印 上一主题 下一主题

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

[复制链接]
188bet
跳转到指定楼层
楼主
发表于 2019-04-19 04:43:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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


<?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 也给可迭代数据介绍了一种伪类型。它能接收任何可迭代的数据。

file

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

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

当前文章://unoplay/u0trt.html

发布时间:2019-04-19 03:03:45

乐博现金换网址了 728彩票网安全吗 娱乐网站注册送金 大宝娱乐官方网站大 金博娱乐网站 600万彩票网手机版下载 澳门银河娱乐场 凤凰娱乐登录网址 龙8国际娱乐官方网站|龙8国际 

点击获取礼包
龙8娱乐_龙8娱乐城|龙8国际娱乐手机登录
沙发
发表于 2019-04-19 08:44:03 | 只看该作者
有位先哲说,政治是经济上的建筑,这句话对,但也不完全对,至少用在李庆安的身上就不算对,火长也就是今天的班长,管十名士兵,虽然小,但毕竟是一个官了,政治地位得到了改善,可李庆安的经济地位却和他的身份大大不符。
回复 支持 反对

使用道具 举报

通发娱乐平台网站
板凳
发表于 2019-04-19 08:35:04 | 只看该作者
“路飞,你给我站住,居然看到爷爷也不打个招呼,还敢开溜。”果然,卡普的声音立刻从后面传来,吓得路飞连忙叫弗兰奇加速。/unobz9ij/60302.html
回复 支持 反对

使用道具 举报

亚虎娱乐_www.yahu66.com|亚虎国际网站娱乐
地板
发表于 2019-04-19 15:32:47 | 只看该作者
“季将军,可就算是撤民也不容易啊!关键是民众不愿意背景离乡,正如季将军所言,安禄山很有策略,先迷惑民众,我就担心等大家都明白时,便已经晚了。”
回复 支持 反对

使用道具 举报

优德w88官方网站_优德w88官方网站※【权威认证】
5#
发表于 2019-04-19 01:46:31 | 只看该作者
“是你先救我的!”舞的声音里没有任何的感情,仿佛只是在述说一个再平常不过的事实。她捧着宝珠坐了起来,身体和衣服都恢复了其应有的柔软,不再像刚才那般僵硬。虽然不知道是什么仙术,但隐娘觉得,刚才的舞之所以看上去像是被石化了一样,只是因为那是她疗伤的方式。
回复 支持 反对

使用道具 举报

立博娱乐骗人的吗
6#
发表于 2019-04-19 02:29:34 | 只看该作者
此人面无表情,或者说是脸上表情完全是僵硬的,两腮深陷,头上绿发乱蓬蓬的,身上衣服也只是朴素的灰色长袍,与身边的华服老者简直就是鲜明对比。
回复 支持 反对

使用道具 举报

龙8国际手机版下载
7#
发表于 2019-04-19 05:23:59 | 只看该作者
东抚司面色微红,营帐内鹰、蛇、豹三组千户都在,桌案上只有简单几碟酒菜,朱元璋厉行节俭之风,其他人自是不敢越界,好在有随身携带美酒,无形中填补一些遗憾。
回复 支持 反对

使用道具 举报

亚博国际
8#
发表于 2019-04-19 03:35:53 | 只看该作者
那僵硬的面孔,还保持着死时谦意的表情,王小民虽然不知道他为什么选择死,但是他的这个谦意的表情,却赢得了王小民的尊重。
回复 支持 反对

使用道具 举报

龙虎国际手机app
9#
发表于 2019-04-19 10:41:48 | 只看该作者
紫妍已经知道面前这个人是谁了,能让她有一种血脉亲切加上对方开口,极为有可能就是他的父亲,想到自己这些年孤零零一个人过,眼眶一红,乌溜溜的大眼睛蒙上了一圈圈的泪珠
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

美高梅官方网址是互联网最大的搜索引擎优化研究中心,是致力于培养学员用户体验意识和提供专业技术解答的专业培训机构, 成立于2007年,2008年第一家入驻歪歪的培训机构,2014年成为腾讯课堂战略合作机构。
© 2007-2016 美高梅官方网址 湘ICP备13004652号-1 Powered by Discuz!X  Template by 美高梅官方网址 
快速回复 返回顶部 返回列表