1.6PHP语言的函数(Function)

1.函数定义

//函数名称对大小写不敏感
function 函数名称([类型]参数1, [类型]默认值参数2 = 值, [类型]&引用参数, [类型]...可变参数): [返回类型] {
    //函数体;
}

2.函数分类

名称修饰符访问
静态方法(static method)用 static 修饰类::静态方法
实例方法(instance method)无 static 修饰对象->实例方法

3.参数分类

名称修饰符
值参数
默认值参数
引用参数用 & 修饰
可变参数用 … 修饰

4.参数传递方式

由于形参是实参的规范,所以实参的数量和类型需与形参一致。

参数的传递不仅支持按位置从左往右依次传递方式,同时也支持按命名参数传递方式。

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

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

5.可变函数

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()
?>

6.覆盖(Override)和final关键字

在子类中,再次声明与父类相同的属性名和方法名也是有效的,这会覆盖父类中原先的属性和方法,这就叫覆盖,有一些其他编程语言称为重写

class A
{
    public $attribute = 'default value';
    function operation()
    {
        echo 'Something<br />';
        echo  'The value of $attribute is '.$this->attribute.'<br />'; 
  }
}
$a = new A();
$a->operation();
//Something
//The value of $attribute is default value
class B extends A
{
    public $attribute = 'different value';
    function operation()
    {
        echo 'Something else<br />';
        echo  'The value of $attribute is '.$this->attribute.'<br />'; 
  }
}
$b = new B();
$b->operation();
//Something else
//The value of $attribute is different value

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

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

7.重载

PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。

8.递归函数

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

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

9.匿名函数

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

function (参数) {
    函数体;
}

10.箭头函数

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

fn (参数列表) => expr

11.魔术方法(Magic Methods)

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

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

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

(0)
上一篇 2021年1月5日 23:24
下一篇 2021年1月6日 00:42

相关推荐

发表评论

登录后才能评论