1 <?php 2 function divide($dividend, $divisor){ 3 return $dividend / $divisor; 4 } 5 echo divide(12, 4); 6 echo divide('sa', 'sd');
这段代码乍一看没毛病,可是若是你向它传递「任意」参数,它就会出问题。php
写出好的代码是一个学无止境的过程。让咱们来改进咱们编写 PHP 函数的方式。 看下上面的代码,想一想第二个函数调用那里会发生什么状况? 它会接受你输入的任何参数,而且尝试执行而后抛出一个数学错误。 可是咱们怎么才能让一个函数严格接收能使其正确执行的参数呢? 现代的 PHP 解决了这个问题,而且有更多妙法能让你的代码质量更进一层,没有 bug。web
你能够严格控制你的函数,使其只接收让它正确运行的参数。让咱们改变上面的函数定义:数组
<?php function divide(int $dividend, int $divisor){ return $dividend / $divisor; } echo divide(12, 4); echo divide('sa', 'sd');
如今,第二次调用这个函数将会抛出一个致命错误,指出其须要的参数必须是整数类型。你能够用不一样的方式处理参数。app
1 <?php 2 // 可选参数 3 function getName(string $firstName, string $lastName = ''){ 4 return $firstName . ' ' . $lastName; 5 } 6 echo getName('Muhammad', 'Nauman'); // Muhammad Nauman 7 echo getName('Adam'); // Adam 8 function divide(int $dividend, int $divisor = 2){ 9 return $dividend / $divisor; 10 } 11 echo divide(12, 4); // 3 12 echo divide(12); // 6 13 // 仅接收 Request 类的实例参数 $request 14 function getReuestParams(Request $request){ 15 return $request->only('name', 'email'); 16 }
在定义的时候,将可选参数或带默认值的参数做为最后一个参数。
PHP 7.1 也给可迭代数据介绍了一种伪类型。它能接收任何可迭代的数据。ide
上图是使用了 iterable
数据类型的函数。函数
如今经过代码,咱们能够控制的更多了,不是吗?没错,确实如此!spa
正如你能够控制传递给指定函数的参数类型同样,你也能够控制函数的返回值类型。它能确保你的函数老是返回同一个数据类型,而且不会崩溃。咱们改变一下上面的代码:code
1 <?php 2 // 可选参数 3 function getName(string $firstName, string $lastName = '') : string { 4 return $firstName . ' ' . $lastName; 5 } 6 echo getName('Muhammad', 'Nauman'); // Muhammad Nauman 7 echo getName('Adam'); // Adam 8 function divide(int $dividend, int $divisor = 2) : int { 9 return $dividend / $divisor; 10 } 11 echo divide(12, 4); // 3 12 echo divide(12); // 6 13 // 仅接收 Request 类的实例 $request 做为参数 14 function getReuestParams(Request $request) : array { 15 return $request->only('name', 'email'); 16 } 17 // 返回 void 类型 18 $attribute = 2; 19 function changeAttribute(string &$param, $value) : void { 20 $param = $value; 21 } 22 changeAttribute($attribute, 5); 23 echo $attribute; // 5
PHP 逐渐引入了这些功能,如:5.1 版引入的数组类型做为参数,5.4 版引入的可调用类型(callable type),以及 7.1 版引入的 void 返回类型等。blog
除了可选参数外,你还能够定义可空(nullable)参数,这意味着你能够定义一种可空参数类型。咱们来看个例子:开发
1 <?php 2 function nullableParameter(?string $name) 3 { 4 return $name; 5 } 6 echo nullableParameter(null); // 不会返回任何东西 7 echo nullableParameter('Nauman'); // Nauman 8 echo nullableParameter(); // 致命错误 9 function nullableParameterWithReturnType(?string $name) : string 10 { 11 return $name; 12 } 13 echo nullableParameter(null); // 致命错误,必须返回 string 类型 14 echo nullableParameter('Nauman'); // Nauman 15 function nullableReturnType(string $name) : ?string 16 { 17 return $name; 18 } 19 echo nullableParameter(null); // 致命错误,$name 应该是 string 类型 20 echo nullableParameter('Nauman'); // Nauman
显然,可空参数不是可选参数,你必须传递一个值或者是 null
。我我的喜欢使用空值做为可选参数,但这取决于你的任务需求。
从我开启职业生涯的时候我就使用 PHP 了,我真的很爱这门语言。在过去很长一段时间里,它都是开发 web 应用的不二之选。如今 7.x 版本又填补了许多高级特性和现代化应用的需求,而且提升了开发者的效率。这门语言正不断的发生改变,找出这些变化,并中止过去的写法,放弃你原来的习惯并自豪的使用这些新特性,让你的代码更易读易懂。 Happy coding :)