1.8PHP语言的函数(Function)

1.函数声明

函数在类中被称为方法(method)。

function [&]函数名称([类型]参数名称, [类型]默认值参数名称 = 值, [类型]&引用参数名称, [类型]...可变参数名称): [返回类型] 
{
    //函数体;
}

2.函数分类

2.1全局函数

名称修饰符
全局函数——————

2.2成员函数

名称修饰符
静态方法static 修饰
实例方法static 修饰

2.3局部函数

名称修饰符
嵌套函数——————

3.参数分类

名称修饰符
参数——————
默认值参数——————
引用参数& 修饰
可变数量参数... 修饰

4.参数传递方式

实参的数量需与形参的数量相同,虽然有时候看似没赋予实参,实际上是提供了 null 值或类型的默认值或其它值,总之必须有值。

实参的类型需与形参的类型兼容,所谓兼容指的是比如存在继承关系。

实参的传递不仅支持按位置从左往右依次传递方式,还支持按命名传递方式。

//按命名传递
方法(参数名称1: 实参1, 参数名称2: 实参2)
<?php
// 按位置传递
array_fill(0, 100, 50);

// 按命名传递
array_fill(start_index: 0, count: 100, value: 50);
?>

实参的传递不仅支持按值传递方式(传递的是副本),还支持按引用传递方式(传递的是内存地址)。

参数类型参数传递方式描述
值类型按值传递对方法内的局部变量的修改不会反应到方法外。
值类型按引用传递对方法内的局部变量的修改会反应到方法外。
引用类型按值传递对方法内的局部变量的修改会反应到方法外,新对象存储在新内存地址。
引用类型按引用传递对方法内的局部变量的修改会反应到方法外,新对象存储在老内存地址。

5.返回方式

5.1按值返回

PHP语言默认支持按值返回。

5.2按引用返回

如需从函数返回一个引用,必须在函数声明和将返回值赋值给一个变量时都使用引用运算符 &

<?php
function &returns_reference()
{
    return $someref;
}

$newref = &returns_reference();
?>

6.可变函数

PHP 支持可变函数的概念。如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数。

可变函数可以用来实现包括回调函数,函数表在内的一些用途。

<?php
function foo() 
{
    echo "In foo()<br />\n";
}

function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}

// 使用 echo 的包装函数
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // 调用 foo()

$func = 'bar';
$func('test');  // 调用 bar()

$func = 'echoit';
$func('test');  // 调用 echoit()
?>

7.递归函数

一个函数可以指向并调用自身,便形成了递归。

function recursion($a)
{
    if ($a < 20) {
        echo "$a\n";
        recursion($a + 1);
    }
}

8.匿名函数

匿名函数(Anonymous functions),也叫闭包函数(closures),匿名函数目前是通过 Closure 类来实现的。

//匿名函数
function (参数名称) {
    函数体;
}
//静态匿名函数
static function (参数名称) {
    函数体;
}

9.箭头函数

箭头函数是一种更简洁的 匿名函数 写法。箭头函数也是 Closure 类的实现。

fn (参数名称) => expr

10.魔术(Magic)方法

PHP将所有以 __(两个下划线) 开头的类方法保留为魔术方法。所有的魔术方法都必须声明为 public

__construct()    __destruct()    __call()         __callStatic()
__get()          __set()         __isset()        __unset()
__sleep()        __wakeup()      __serialize()    __unserialize()
__toString()     __invoke()      __set_state()    __clone()
__debugInfo()

11.final方法

final 关键字加在方法前面可以防止父类方法被子类方法覆盖。

除了构造函数之外,private 方法不能声明为 final

class A
{
    final function operation()
    {...}
}

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/4946.html

(0)
上一篇 2021年1月7日 08:37
下一篇 2021年1月8日 01:53

相关推荐

  • 1.10PHP语言的条件(Conditional)、循环(Loop)、跳转(Jump)语句

    1.if条件 2.if-else条件 3.if-elseif-else条件 4.switch-case条件 switch 语句的用途:很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码…

    PHP语言教程 2021年1月10日
    08430
  • 1.9PHP语言的语句(Statement)

    1.declare语句 declare 结构通过设定指令(directive)以用来控制语句块(statement)的行为。 1.1ticks指令 目前,只支持 ticks、encoding、strict_types 这三个指令。 Tick 是一个在 declare 中的语句块(state…

    PHP语言教程 2021年1月9日
    0280
  • 2.1PHP语言的命名空间(Namespace)

    1.命名空间声明 命名空间通过关键字 namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字。 只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和 trait)、接口、常量和函数。 2.导入外部元素 可以使用 use…

    PHP语言教程 2021年2月1日
    06370

发表回复

登录后才能评论