经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
其实你并不懂如何定义一个 PHP 函数
来源:cnblogs  作者:程序媛的明天  时间:2019/11/12 8:49:40  对本文有异议
  1. 1 <?php
  2. 2 function divide($dividend, $divisor){
  3. 3 return $dividend / $divisor;
  4. 4 }
  5. 5 echo divide(12, 4);
  6. 6 echo divide('sa', 'sd');

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

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

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

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

  1. <?php
  2. function divide(int $dividend, int $divisor){
  3. return $dividend / $divisor;
  4. }
  5. echo divide(12, 4);
  6. echo divide('sa', 'sd');

  

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

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

 

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

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

 

 

 

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

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

函数与它们的返回值

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

  1. 1 <?php
  2. 2 // 可选参数
  3. 3 function getName(string $firstName, string $lastName = '') : string {
  4. 4 return $firstName . ' ' . $lastName;
  5. 5 }
  6. 6 echo getName('Muhammad', 'Nauman'); // Muhammad Nauman
  7. 7 echo getName('Adam'); // Adam
  8. 8 function divide(int $dividend, int $divisor = 2) : int {
  9. 9 return $dividend / $divisor;
  10. 10 }
  11. 11 echo divide(12, 4); // 3
  12. 12 echo divide(12); // 6
  13. 13 // 仅接收 Request 类的实例 $request 作为参数
  14. 14 function getReuestParams(Request $request) : array {
  15. 15 return $request->only('name', 'email');
  16. 16 }
  17. 17 // 返回 void 类型
  18. 18 $attribute = 2;
  19. 19 function changeAttribute(string &$param, $value) : void {
  20. 20 $param = $value;
  21. 21 }
  22. 22 changeAttribute($attribute, 5);
  23. 23 echo $attribute; // 5

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

可选参数 VS 可空参数

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

  1. 1 <?php
  2. 2 function nullableParameter(?string $name)
  3. 3 {
  4. 4 return $name;
  5. 5 }
  6. 6 echo nullableParameter(null); // 不会返回任何东西
  7. 7 echo nullableParameter('Nauman'); // Nauman
  8. 8 echo nullableParameter(); // 致命错误
  9. 9 function nullableParameterWithReturnType(?string $name) : string
  10. 10 {
  11. 11 return $name;
  12. 12 }
  13. 13 echo nullableParameter(null); // 致命错误,必须返回 string 类型
  14. 14 echo nullableParameter('Nauman'); // Nauman
  15. 15 function nullableReturnType(string $name) : ?string
  16. 16 {
  17. 17 return $name;
  18. 18 }
  19. 19 echo nullableParameter(null); // 致命错误,$name 应该是 string 类型
  20. 20 echo nullableParameter('Nauman'); // Nauman

 

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

总结

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

 

原文链接:http://www.cnblogs.com/a609251438/p/11836834.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号