php 函数知识
1、函数是介绍
在PHP中,函数是一段可重复使用的代码块,用于执行特定的任务。函数封装了一系列的代码,可以接收参数、执行特定的操作,并返回一个值(可选)。函数的主要目的是提高代码的可维护性和可重用性。
函数可以通过函数名进行调用,并可以传递参数给函数。函数可以执行各种操作,例如计算、数据处理、输出、数据库操作等。通过将一系列操作封装在函数中,可以使代码更加模块化和可读性更高。
在文件头部定义declare(strict_types=1)
为严格模式,这样会对函数参数类型进行严格约束。
declare(strict_types=1);
function 函数名称(类型 参数1,类型 参数2 …):返回值类型 {
//逻辑代码
return 返回值; //如需函数有返回值时使用,否则函数返回值为null
}
它是函数在程序代码中的识别名称,函数名可以是以字母或下划线开头后跟零个或多个字母、下划线和数字的任何字符串。函数名不区分大小写。
function myFunc(){}
MYFUNC();
myfeunc();
MyFunC();
vardump(function_exists('myFunc')); //判断函数是否存在
2、参数传递
按值传递参数
在PHP中,函数默认按值传递参数。这意味着函数在接收参数时会创建它们的副本,并在函数内部使用这些副本进行操作,而不会直接修改原始参数的值。
按址传递参数(用“&”符号实现)
在PHP中,函数默认是按值传递参数的,但你可以使用引用(&)来实现按引用传递参数,也称为按地址传递参数。
按引用传递参数允许函数直接访问和修改原始变量的值,而不是创建副本。这意味着在函数内部对参数的修改将影响到原始变量。
$number = 5;
function increment(int $num):void {
$num = $num + 1;
echo "函数内Number: " . $num . "\n";
}
echo "原Number: " . $number . "\n";
increment($number);
echo "传参后Number: " . $number . "\n";
//原Number: 5 函数内Number: 6 传参后Number: 5
$number = 5;
function increment(int &$num):void {
$num = $num + 1;
echo "函数内Number: " . $num . "\n";
}
echo "原Number: " . $number . "\n";
increment($number);
echo "传参后Number: " . $number . "\n";
//原Number: 5 函数内Number: 6 传参后Number: 6
点语法
当传递的参数数量确定时,可以使用…与变量名。函数的所有参数会成为变量的数组元素。
参数默认值
php 支持函数的默认方式调用。如果在调用函数时没有指定参数的值,在函数中会使用参数的默认值。 默认参数必须列在所有没有默认值参数的后面。
function sum(...$args)
{
return array_sum($args);
}
echo sum(1, 2, 3);
function say(string $name="张飞"):void{
echo $name;
}
say("马云"); //马云
say();// 张飞
返回值类型
-
int
:整数类型 -
float
:浮点数类型 -
bool
:布尔类型 -
string
:字符串类型 -
null
:表示无返回值或返回空值 -
array
:数组类型 -
object
:对象类型 -
callable
:可调用类型,包括函数、方法和闭包 -
iterable
:可遍历类型,包括数组和实现了Traversable
接口的对象 -
类名:指定返回值类型为特定的类或其子类
-
接口名:指定返回值类型为特定的接口或其实现类
-
通过使用
typedef
关键字创建的自定义类型 -
void
:表示函数没有返回值。 -
mixed
:表示函数可以返回任意类型的值。
3、变量范围
局部变量
在函数之中声明的变量就是局部变量,并且该变量只有在函数范围之中才能加以使用。如果其它程序局部需要调用使用该变量值时,必须透过「return」指令,来将其传回至主程序区块以作后续处理。
局部变量的作用域仅限于其声明的作用域内部。一旦超出作用域范围,局部变量将不再可用,并且在内存中被释放。这使得局部变量在控制程序的状态和封装数据时非常有用。
function myFunction():void {
$name = 'John'; // 声明一个局部变量
echo $name;
}
myFunction(); // 输出:John
echo $name; // 错误,无法访问函数内的局部变量
全局变量
在函数范围之外声明的变量为全局变量,在函数无法直接使用全局变量,函数要使用全局变量,必须要利用 global 引入或 $GLOBALS 超全局数组引入。
注意的是,全局变量的使用应该谨慎,因为它们可以在程序的任何地方被修改,而不受局部作用域的限制。在大型程序中滥用全局变量可能导致代码的可读性和维护性下降。为了避免全局变量的滥用,可以使用面向对象编程的原则,封装数据并通过方法访问和操作数据。
$name = 'John'; // 声明一个全局变量
function myFunction() {
global $name; // 使用 global 关键字引用全局变量
echo $name;
}
myFunction(); // 输出:John
静态变量
PHP 支持声明函数变量为静态的(static)。一个静态变量在所有对该函数的调用之间共享,并且仅在脚本的执行期间函数第一次被调用时被初始化。要声明函数变量为静态的用关键字 static。通常,静态变量的第一次使用时赋予一个初始值。
注意的是,静态变量的生命周期会持续到程序执行结束,除非显式重置或重新赋值。此外,静态变量可以在类之间共享信息,可以用于记录全局状态或跟踪某些计数器等。然而,滥用静态变量可能会导致代码的可读性和维护性下降,因此应该谨慎使用。
function myFunction() {
static $count = 0; // 声明一个静态变量
$count++;
echo $count;
}
myFunction(); // 输出:1
myFunction(); // 输出:2
myFunction(); // 输出:3
变量函数
在PHP中,变量函数是一种特殊的功能,允许将函数名存储在变量中并使用该变量调用函数。这种灵活性使得可以根据运行时的条件动态地选择要调用的函数。
function greet() {
echo "Hello, World!";
}
$funcName = "greet"; // 将函数名存储在变量中
$funcName(); // 使用变量函数调用函数,输出:Hello, World!
//例子二
function add($a, $b) {
return $a + $b;
}
function subtract($a, $b) {
return $a - $b;
}
function multiply($a, $b) {
return $a * $b;
}
function divide($a, $b) {
if ($b != 0) {
return $a / $b;
} else {
return "分母不能为零!";
}
}
$operator = "multiply"; // 根据需要设置运算符
$a = 10;
$b = 5;
switch ($operator) {
case "add":
$result = add($a, $b);
break;
case "subtract":
$result = subtract($a, $b);
break;
case "multiply":
$result = multiply($a, $b);
break;
case "divide":
$result = divide($a, $b);
break;
default:
$result = "无效运算";
break;
}
echo "结果是: " . $result;
递归函数
递归函数是一种在函数内部调用自身的函数。通过递归,函数可以重复执行相同的操作,直到满足特定的条件为止。在编程中,递归函数通常用于解决可以被分解为相同问题的子问题的情况。注意:使用时必须设置跳出递归的条件,不然就呵呵….
function factorial($n) {
if ($n === 0 || $n === 1) {
return 1;
} else {
return $n * factorial($n - 1);
}
}
$result = factorial(5); // 计算 5 的阶乘
echo $result; // 输出:120