PHP 零基础入门笔记(9):函数 function

简介: PHP 零基础入门笔记(9):函数 function

函数 function

将实现某一功能的代码块封装到一个结构中,实现代码复用


函数定义和使用

1、函数定义


function 函数名(参数){
    // 函数体
    return 返回值
}

实现复用:一个功能一个函数


2、函数的使用


函数名(参数);

3、函数调用的特点:


只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义之前)


3.1、变量使用在定义之前会报错


<?php
echo $a;
$a = 'hello';
// PHP Notice:  Undefined variable

3.2、函数可以在定义之前使用


<?php
hello();
// hello
function hello()
{
    echo 'hello';
}

原因:先编译后执行


4、函数执行的内存分析


读取代码进入带代码段(编译:将代码变成字节码存储到内存)

根据代码逐行执行

函数命名规范

命名规范:字母、数字、下划线组成,不能以数字开头


函数命名遵循以下规则


驼峰法 getName()

下划线法 get_name()

函数名字,在一个脚本周期中,不允许出现同名函数


参数详解

1、函数的参数分两种:形参和实参


形参:形式参数,不具有实际意义的参数,函数定义时使用的参数


实参:实际参数,具有实际数据意义的参数,函数调用时使用的参数


形参是实参的载体


// 定义函数,形参可以有多个,逗号分隔
function add($a, $b){
    echo $a + $b;
}
// 调用函数
add(1, 2);

注意:


PHP 中允许实参个数多余形参,函数内部不使用

PHP 中形参个数没有限制

实参不能少于形参

2、默认值


形参可以指定默认值,default value


实参没有传递,就使用用默认值

function add($a, $b = 0){
    echo $a + $b;
}
// 使用实参
add(1, 2);
// 使用默认值
add(1);

注意:


默认值放在最后

3、引用传递


值传递:调用函数时,传递实参给形参,通常是(实参的值赋值给形参)


引用传递: 有时候,希望函数内部改变外部的数据(实参的地址赋值给形参)


function 函数名(形参1, &形参2){
    // 函数体
}

函数体

函数内部的代码(大括号内)


1、函数返回值


return 返回函数执行的结果


如果没有明确返回值,系统默认返回 null;


function add($a, $b){
    return $a + $b;
}
echo add(1, 2);

函数返回值,可以是任意类型


return 作用:


返回函数执行结果

结束函数执行,不再执行后面的代码

在文件中使用,返回值给包含的文件, 通常在配置文件中使用

<?php
// config.php
return 'hello';
<?php
// main.php
$hello = include_once('config.php');
echo $hello;
// hello

作用域

变量(常量)能够被访问的区域


变量可以在普通代码中定义

变量可以在函数内部中定义

1、作用域分类:


超全局变量:系统定义的变量(预定义变量:$_POST)

没有访问限制

全局变量:函数外部定义的变量

只允许在全局空间中使用,理论上函数内部不可用

脚本周期:直到脚本运行结束

局部变量:函数内容定义的变量

只允许在函数内部使用

脚本周期:直到函数执行结束

<?php
// 会被保存到超全局变量$GLOBALS 中
$global = '全局变量';
function foo()
{
    $inner = '局部变量';
    // 不能访问到全局变量
    // echo $global;
    // 可以通过超全局变量访问
    echo $GLOBALS['global'];
}
foo();
var_dump($GLOBALS);

2、函数内部使用外部变量


通过$GLOBALS

通过参数传值

global 关键字

使用常量,常量没有空间限制

global 关键字

函数内部和外部对同名变量使用同一个内存地址


全局空间存在变量,直接引用

全局空间不存在,新定义一个全局变量

<?php
// 会被保存到超全局变量$GLOBALS 中
$global = '全局变量';
function foo()
{
    // 直接使用会报错 PHP Notice:  Undefined variable
    // echo $global;
    // 声明为全局变量后,可以使用
    global $global;
    echo $global;
}
foo();

静态变量 static

在函数内部定义的变量,实现跨函数共享数据,同一个函数被多次调用


<?php
function foo()
{
    // 局部变量
    $num = 1;
    // 静态变量
    static $count = 1;
    echo $num++, $count++, ' ';
    // 11 12 13
}
foo();
foo();
foo();

静态变量的原理:


系统在编译的时候会对 static 变量初始化:为静态变量赋值

函数调用的时候,会自动跳过 static 关键字这一行

静态变量的使用:


统计当前函数的调用次数

统筹函数多次调用得到的不同结果(递归思想)

可变函数

当前变量保存的值,是函数的名字,可以使用变量(),来调用函数


示例 1


<?php
function foo()
{
    echo 'hello';
}
$foo_func = 'foo';
$foo_func();
// hello

示例 2 回调函数


<?php
function callback($a)
{
    return $a * $a;
}
function foo($func, $a)
{
    //  执行一些代码
    return $func($a);
}
$result = foo('callback', 2);
echo $result;
// 4

匿名函数

没有名字的函数


基本语法

// 定义匿名函数
$foo = function(){
    // 函数体
};
// 调用匿名函数
$foo();

示例


<?php
$foo = function () {
    echo 'hello';
};
$foo();
// hello
// 得到一个对象
var_dump($foo);
// object(Closure)#1 (0) {}

闭包 closure

构成


要执行的代码块(由于自由变量)被包含在代码块中,这些自由变量以及由他们引起的对象没有被释放

为自由变量提供绑定的计算机环境(作用域)

简单理解:函数内部有一些局部变量在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用


<?php
function foo()
{
    // 局部变量
    $count = 1;
    // 匿名函数 通过use将外部变量保留给内部使用(闭包)
    $inner_func = function () use ($count) {
        // 不能直接使用,会报错PHP Notice:  Undefined variable
        echo $count++;
    };
    return $inner_func;
};
$func = foo();
$func();
$func();
$func();
// 111

伪类型

PHP 中实际上不存在的类型


伪类型主要有两种


Mixed: 混合型,可以是多种 PHP 的数据类型

Number: 数值型,可以是任意数值类型(整型和浮点型)

相关文章
|
2月前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
9天前
|
关系型数据库 MySQL 数据库连接
PHP内置函数
PHP内置函数
20 5
|
1月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。
|
2月前
|
存储 API PHP
php学习笔记-php数组的创建和使用,数组常用函数-day03
关于PHP数组的创建、使用以及常用函数的详细学习笔记。
php学习笔记-php数组的创建和使用,数组常用函数-day03
|
1月前
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
64 1
|
1月前
|
Unix PHP 数据库
PHP日期和时间Date()函数获取当前时间
通过灵活运用 `date()`函数及其丰富的格式选项,PHP开发者可以轻松地在应用程序中处理和展示日期及时间信息。无论是需要精确到秒的完整时间戳,还是仅仅展示日期或时间的某一部分,`date()`函数都能胜任。理解并熟练应用这些格式化技巧,对于提升代码的可读性和维护性至关重要。
43 1
|
1月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新语法,相比传统函数表达式更简洁,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。这使得箭头函数在处理回调和闭包时更加灵活方便。
|
1月前
|
C++ 容器
函数对象包装器function和bind机制
函数对象包装器function和bind机制
20 0
|
2月前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
2月前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。

热门文章

最新文章