1.1.1. 05.函数


  • 函数名命名规则与变量名命名规则一直,以字母或下划线打头,后面跟任意字母、数字、下划线。
  • 要避免递归函数/方法调用超过 100-200 层,因为可能会使堆栈崩溃从而使当前脚本终止
  • PHP 中的所有函数和类都具有全局作用域。PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。

1.自定义函数

  function 函数名(参数 1,参数 2....参数 n){
     // 函数体
  }

2.函数参数

  • 可以通过参数将函数外部信息传到内部
  • 函数可以有默认值,顺序先非默认值参数,后有默认值参数
  • 函数的参数可以指定类型,指定的类型可以是,类名、接口名、self、array、callback。php7.0 之后支持 bool、float、int、string。
  function demo(ClassName $class_name,String $arg2 = 'apple'){

  }
  • 引用参数,默认情况下传入函数的参数值是不会改变的,当需要使传入值改变时,可以使用 & 引用。
<?php
function add_some_extra(&$string)
{
    $string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;    // outputs 'This is a string, and something extra.'
?>

4.严格类型

默认情况下,如果能做到的话,PHP将会强迫错误类型的值转为函数期望的标量类型。 在严格类型下,则不会。并且会报错,唯一的例外时将 integer 类型传给期望是 float 类型的函数。

declare(strict_types=1);
function fn2(float $a){
  echo $a;
}
$c = 1;
fn2($c); // 输出 1

function fn(int $a){
  echo $a;
}
$c = '1';//string
fn($c);// 报错

5.可变参数的参数列表

PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 ... 语法实现

  <?php
    function fn(...$args){
        foreach ($args as $arg) {
            echo $arg.PHP_EOL;
        }
    }

    fn(1,2,3,4,5,6); // 输出 1 2 3 4 5 6

6.返回值类型

函数的返回值可以通过 return 返回。返回任意类型,返回后立即终止函数的运行,并且将控制权返还给调用函数行。

function fn(){
  return "hello";
}
  • 在 php7.0 之后,可以限制返回值的类型。
  • 当覆盖一个父类方法时,子类方法的返回值类型声明必须与父类一致。如果父类方法没有定义返回类型,那么子类方法可以定义任意的返回值类型声明。
declare(strict_types=1);
function($a):float {
  return 1.1;
}

7.可变函数

php 支持可变函数概念,即在变量后加括号(),则会调用变量值同名的函数。不能用于系统函数如 echo,print,unset(),isset(),empty(),include,require 。

  function foo(){
    echo 1;
  }

  $a = foo;
  $a(); // 输出 1

8.匿名函数

匿名函数也叫闭包函数。 闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去

(function (){
  echo '匿名函数';
})();

#传递参数

$a = function ($arg) {
 echo $arg;
}
$arg = 'hello';

$a($arg);//hello;

# 传递外部作用域变量
$arg = 'arg';
$f = function() use($arg){
  echo $arg;
}
$f();
Copyright © Kagami丶 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-10-17 19:28:55

results matching ""

    No results matching ""