6. 函数

作者: 57fc17b7d598 | 来源:发表于2017-06-23 13:47 被阅读9次

基本介绍

函数是一组用来执行多条语句的代码块,它能够接受参数和返回数据,其用途需明确,其逻辑需具有整体性,否则便没有存在的意义。

function example(string $name, int $age){
    echo "大家好,我叫 $name <br />";
    echo "我出生于:" . (date('Y') - $age) . "年 <br />";
    return "谢谢!";
}
echo example("iGuoji", 26);

上例是一个简单的函数,它具有参数和返回值,也有自己的功能和逻辑。

函数中可以存在函数、类、以及任何其他有效的PHP代码。

函数的命名规则如变量的命名规则一样,但不区分大小写

函数不支持重载,也不能取消定义或是重复定义。

函数无需在被调用之前定义,但也不是那么的绝对,有点类似 ES6 中的变量提升。

// 提前调用
echo example("iGuoji", 26);

// 定义函数
function example(string $name, int $age){
    echo "大家好,我叫 $name <br />";
    echo "我出生于:" . (date('Y') - $age) . "年 <br />";
    return "谢谢!";
}

// 再次提前调用另一个函数
foobar();

// 结果自然是报错了
if(TRUE){
    function foobar(){
        echo 'hello world';
    }
}

上例中的两个函数调用和定义都差不多,区别是一个直接定义的,另一个是在某个条件达成之下才定义,所以由此可知,PHP在解析的时候只是粗略的扫了一眼,知道第一个函数可以直接定义,但是第二个函数还需要条件判断成功才能定义,所以PHP只处理第一个,第二个先不管。

简单而言,函数在被调用之前,不能存在按条件定义

PHP 中的所有函数和类都具有全局作用域,不用管它是在哪里定义的。

// 如果不先调用我,那么下面的每一行代码都将出错
example();

// 函数调用
foobar();
// 静态方法调用
Laravel::register();
// 类的实例化
$laravel = new Laravel();
$laravel->boot();


// 定义函数
function example(){
    // 函数中的函数
    function foobar(){
        echo "hello ";
    }
    // 函数中的类
    class Laravel{
        public function boot(){
            echo 'world';
        }
        static function register(){
            echo '<p>PHP 是世界上最好的语言</p>';
        }
    }
}

// 最终输出
/*
hello
PHP 是世界上最好的语言
world
*/

参数介绍

参考:6.1 函数参数

返回值

函数的返回值通过return语句来执行,可以返回一个任意类型的数据给函数调用者,同时终止函数执行,不能同时返回多个数据,但可以返回一个数组来达到类似的效果。

返回值的类型,可以在函数定义时进行声明,非严格模式下会尽量进行自动转换来达到预期的效果,实在转换不了或是严格模式下就会直接报错。

// 求和函数
function sum(int $x, int $y) : int{
    return $x + $y;
}
// 输出 3
echo sum(1, 2.5);

当一个父类中的方法声明了返回值类型时,另一个子类在重写这个方法时,也必须声明相同类型的返回值,如果父类没有声明返回值类型,则子类可以随意发挥。

可变函数

参考:6.2 可变参数

匿名函数

匿名函数,也叫做闭包函数,是指一个没有名字临时创建的函数,通常用做回调函数。

匿名函数目前是通过 Closure 类来实现的。

匿名函数特点之一,结尾的大括号后面需要加分号,如};,否则报错后会让你怀疑人生。

// 匿名函数
$foobar = function(){
    echo "hello world";
};
// 输出 hello world
$foobar();

匿名函数特点之二,通过 use 可以继承父作用域里的变量。

// 普通变量
$string = "hello world";

// 匿名函数
$foobar = function() use ($string){
    echo $string;
};

// 输出 hello world
$foobar();

需要注意的是,use 不能传递超全局变量、$this、或是和参数重名的变量,而且传递的 方式是值传递

相关文章

  • 6. 函数

    函数 SQL 可用函数处理数据,但不同的DBMN都有特定的函数,各个函数的名称和用法可能不同。 文本处理函数 日期...

  • 6. 函数

    基本介绍 函数是一组用来执行多条语句的代码块,它能够接受参数和返回数据,其用途需明确,其逻辑需具有整体性,否则便没...

  • 6.函数

    6.1基础 实参是形参的初始值。 局部对象 名字有作用域,对象有生命周期。 名字的作用域是程序文本的部分,名字在其...

  • 6.函数

    funcf_name(v_name:v_Class, ...) -> return_Class { //fun_c...

  • 6.函数

    函数 使用 function 关键字来声明, 后跟一组参数以及函数体 通过 return 语句指定函数返回值 re...

  • kotlin进阶语法

    构造方法 data class == 遍历 6.循环 函数嵌套 函数参数默认值 扩展 内联函数 函数类型参数 by...

  • JavaScript回调函数基础

    javascript回调函数 5.函数的返回值 6.回调函数的基础

  • javaScript函数

    1.函数的封装 2.return子句 3.函数的参数 4.函数练习 5.匿名函数 6.函数练习

  • 6. Python| 函数_调用函数

    python内置了很多有用的函数,可以直接调用. 调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs...

  • 6.函数 Functions

    定义和调用函数 没有参数的函数 Functions With Multiple Parameters 多参函数 无...

网友评论

      本文标题:6. 函数

      本文链接:https://www.haomeiwen.com/subject/ehqccxtx.html