目录
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