php学习笔记-php自定义函数-day05

简介: 本文介绍了PHP自定义函数的创建、调用、参数赋值以及作用域和生命周期,还探讨了`global`和`static`关键字的使用,以及`return`、`exit`和`die`的不同用法。

php函数

php函数包括三种类型,内置函数,自定义函数,变量函数。

内置函数,即php内部提供的原生的,预定义好的,直接可调用使用的函数。

自定义函数,程序员自定义的函数,定义声明后才可使用。

变量函数,变量函数类似可变变量,变量函数的函数名为一个变量。(有点和js函数一样的感觉)

1.自定义函数

自定义函数格式:

    function functionName($param1,$param2,$param3,...$paramn=defaultValue){
   
        函数体
        return 返回值;
    }

其中 function ,是用来定义自定义函数的关键字,不区分大小写。functionName ,是自定义的函数名。$param是定义函数的形参。defaultValue,函数参数的默认值。 函数体,是函数功能的实现,在函数被调用时执行的语句块。return 即为返回值,其返回值可以是任意一种数据类型,函数可以没有返回值,这个需要自定义的功能来看

2.自定义函数的声明和调用

2.1 同文件调用自定义函数

在同文件中调用已经定义好的函数,直接使用函数名调用即可。

无参无返回值自定义函数示例 sayHello():

    //定义函数sayHello,它的功能是输出一句hello
    function sayHello(){
   
        echo "hello"."\n";// hello
    }
    // 在同文件中调用直接使用函数名调用即可
    sayHello();

有参有返回值自定义函数示例 sum():

    function sum($a,$b){
   
        return floatval($a+$b);//因为函数体比较简单,直接使用return关键字返回计算结果即可
    }

    $end =  sum(2,3);
    echo $end;// 5

2.2 跨文件调用自定义函数

通常,我们定义一个某种特定的功能函数,会被整个php程序频繁的调用,而且很多情况是跨文件调用。

跨文件调用,需要了解几个php语言结构(提供php文件间的相互引用功能,提高代码的重用性)。

include ,require 语言结构

include 语言结构的语法格式 : mixed include ( string resource)
include 语言结构的功能 : include语言结构将一个资源文件 resource 载入到当前的php程序中, resource是一个资源文件的文件名。若找不到resource对应的文件则返回false,找到resource文件且其没有返回值时,include返回整数1,若resource有返回值,则include返回其返回值。
tip:(资源文件可以是php本地服务器的图片,html,php页面等,也可以是互联网上的资源(使用互联网上的资源,需要将php.ini配置文件中的allow_url_include设置为on,表示开启允许载入互联网资源)。

require 语言结构的语法格式 : mixed require ( string resource)
require 语言结构的功能 : 与上面的include基本一致,唯一的区别就是,include语言结构载入文件,如果出现错误后会提示错误信息然后继续执行;而require语言结构载入文件,如果出现错误后会提示错误信息然后停止执行

跨文件使用自定义函数例子:

先写一个untils.php,用来被其他php文件调用:

    <?php
    // 这里只为了演示跨文件调用功能,函数写的很简陋

    function sum($a,$b){
   
        return intval($a+$b);
    }

    function sub($a,$b){
   
        return intval($a-$b);
    }

    function mul($a,$b){
   
        return intval($a*$b);
    }

    function div($a,$b){
   
        return intval($a/$b);
    }

    ?>

创建一个 main1.php 并且 使用 include 语言结构将 untils.php 载入:

    // 使用include语言结构,引入刚刚写的自定义工具函数php文件 untils.php
    include("untils.php");
    echo sum(1,2)."\n";//3
    echo sub(1,1)."\n";//0
    echo mul(1,2)."\n";//2
    echo div(2,2)."\n";//1
    // 故意设置一个错误的资源文件,查看输出
    include "untils1.php";// Warning: include(untils1.php): failed to open stream: No such file or directory
    echo "include语言结构载入文件错误时,会会提示错误信息,并且继续执行剩下的代码~~~~";

创建一个 main2.php 并且 使用 require 语言结构将 untils.php 载入:

    // 使用require语言结构,引入刚刚写的自定义工具函数php文件 untils.php
    require("untils.php");
    echo sum(1,2)."\n";//3
    echo sub(1,1)."\n";//0
    echo mul(1,2)."\n";//2
    echo div(2,2)."\n";//1
    // 故意设置一个错误的资源文件,查看输出
    require "untils1.php";// Warning: include(untils1.php): failed to open stream: No such file or directory
    // 下面的这句输出不会显示 原因就是require的特点,遇到错误信息时,反馈错误信息后便停止运行
    echo "require 语言结构载入文件错误时,会提示错误信息,然后终止程序的运行~~~~";

include_once ,require_once 语言结构

include_once 和 require_once 这两种语言结构可以说是对上面的include和require的完善和补充。

因为随着程序规模的扩大,同一程序多次使用include或require来载入同一个资源文件,这样会导致资源文件混乱的问题,为了解决这个问题,便提出了 include_once ,require_once 语言结构,确保同一个资源文件只被引用一次

使用方法和上面的 include ,require 语言结构基本一样就不过多赘述。

2.3 自定义函数的参数赋值

自定义函数参数的赋值,也分为传值赋值和传地址赋值(与变量赋值和数组赋值一样)。

传值赋值,不会改变原有的值内容;而传地址赋值,会改变原有的值内容。

如下代码:

传值赋值:

    $a = 3;

    // 使用传值赋值,在不重新赋值的情况下,变量本身的值内容不会发生改变
    function add1($a){
   
        $a = intval($a+1);// 局部变量只在函数体内有效
        return $a;
    }

    echo add1($a)."\n";// 4

    echo $a; //3

传地址赋值:

    $a = 3;
    // 使用传地址赋值,原有的变量的值内容发生改变
    function add2(&$a){
   
        $a +=1;
        return  $a;
    }

    echo add2($a)."\n";// 4

    echo $a; //4

3.变量的作用域 及 生命周期

变量的作用域包括,全局变量和局部变量。(变量的作用域,取决于变量在php程序中的位置)。

  • 1.在函数内定义的变量(包括函数的参数)为局部变量,局部变量在调用函数结束后自动被回收释放。
  • 2.函数定义外的变量为全局变量,在当前的pphp程序中都可以访问到,当整个当前php程序被执行完毕后才会回收释放。

变量的生命周期也其实就是它的作用域,函数体内变量的生命周期就是从函数开始执行到函数执行完毕,而全局变量的生命周期就是当前php程序执行开始到执行完毕。

4.global 关键字 和 static 关键字

使用global关键字会将变量的作用域变为全局变量

global关键字用法的注意事项:

  • 1.不能使用global定义函数的参数
  • 2.在函数内使用global定义全局变量的同时,不能使用赋值语句给该变量赋值
  • 3.global可以一次性的定义多个全局变量。(global $a,$b,$c;
  • 4.在函数内使用global语句定义全局变量时,如程序已经存在该全局变量,则拿来直接使用,如果不存在则创建。
  • 5.经过global定义的全局变量,php会将该变量的定义放到$_GLOBALS数组中,数组的键该全局变量的变量名,数组的值为该全局变量的变量值。

static 关键字 可以将函数体内的变量从这次调用一直存活到下次调用。

static 关键字用法的注意事项:

  • 1.static主要用来修饰函数体内的变量,不能使用static定义函数的参数
  • 2.静态变量旨在php程序的当前执行有效,如果重新启动了程序,则一切又将重新开始。
  • 3.经static修饰的变量一般要进行初始化。
  • 4.static可以一次性的定义多个静态全局变量。(static $a,$b,$c;

5.return exit die

5.1 return

return是语言结构而不是函数。

如果一个函数中包含return 语句,当调用此函数时,函数的执行只会进行到return这一步,return之后的语句都不会执行,并将return的参数作为函数的值返回。

如果在全局范围中调用,则当前php文件中止运行。如果当前php文件是被 include 的或者 require 的,则控制交回调用文件。此外,如果当前php文件是被 include 的,则 return 的值会被当作 include 调用的返回值,相应的在主php文件中定义一个变量进行返回值的接收。
如果在主php文件中调用 return,则php程序中止运行。

5.2 exit()

输出一个消息并且退出当前脚本。

语法格式: void exit ([ string $status ] ) , void exit ( int $status )

如果 status 是一个字符串,在退出之前该函数会打印 status 。
如果 status 是一个 integer,该值会作为退出状态码,并且不会被打印输出。 退出状态码应该在范围0至254,不应使用被PHP保留的退出状态码255。 状态码0用于成功中止程序。
Note: PHP >= 4.2.0 当 status 是一个 integer,不会打印输出。

5.3 die()

关于die()的使用,官方文档给的是结构与die()一致。

5.4 三者比较

die与exit

手册上标明 "die — Equivalent to exit().This language construct is equivalent to exit().”
但在实际代码过程中可以存在一定的选择差别,例如这样:涉及到提前终止程序/脚本执行的情况,使用exit();当程序出错,为了停止执行并显示提示信息时,使用die()。

return与exit(或die)

如果在全局范围内调用exit()或return,它们产生影响是一样,即中止当前脚本运行,在其他范围内调用两者,return始终会返回值,不管当前文件被include/require。


相关文章
|
3月前
|
存储 Java 数据库连接
php学习笔记-代码基本语法-day01
本文是关于PHP编程语言的基础语法学习笔记,内容包括PHP的介绍、注释风格、数据类型、命名规范、常量和变量的使用,以及变量和常量相关的常用函数。文中详细解释了PHP的基本语法元素和一些易混淆的概念,如传值赋值与传址赋值、可变变量,以及如何检查变量是否已定义或为空。
php学习笔记-代码基本语法-day01
|
3月前
|
JavaScript 前端开发 安全
php学习笔记-普通表单参数提交获取及页面的重定向和一个登录小demo-day05
本文介绍了PHP中普通表单参数的提交获取、页面重定向的方法,并通过一个登录示例演示了表单参数的封装和页面跳转处理。
|
3月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
3月前
|
存储 API PHP
php学习笔记-php数组的创建和使用,数组常用函数-day03
关于PHP数组的创建、使用以及常用函数的详细学习笔记。
php学习笔记-php数组的创建和使用,数组常用函数-day03
|
3月前
|
JavaScript Java PHP
php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02
本文是第二天的PHP学习笔记,涵盖了PHP中运算符的使用、类型转换方式,以及打印输出语句的特点,展示了其相较于其他编程语言的一些特殊之处。
php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02
|
3月前
|
SQL 关系型数据库 MySQL
php学习笔记-连接操作mysq数据库(基础)-day08
本文介绍了PHP中连接操作MySQL数据库的常用函数,包括连接服务器、设置字符集、关闭连接、选择数据库、结果集释放、获取影响行数以及遍历结果集等操作。通过书籍查询的实例演示了如何使用这些函数进行数据库操作,并提供了一个PHP操纵MySQL数据库的模板。
php学习笔记-连接操作mysq数据库(基础)-day08
|
3月前
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
3月前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
4月前
|
数据库连接 PHP 数据库
PHP中创建自定义函数以简化日常任务
【8月更文挑战第31天】在PHP编程中,自定义函数是提升代码重用性和清晰度的关键。本文将引导你了解如何创建和使用自定义函数,以及它们如何帮助你的日常开发工作变得更加高效。我们将通过具体案例探讨函数的构建,参数传递,返回值处理,并展示如何通过自定义函数简化复杂任务和减少冗余代码。
|
人工智能 机器人 PHP
【web 开发基础】PHP 自定义函数之函数的调用 -PHP 快速入门 (25)
从上一篇文章《【web 开发基础】PHP 自定义函数之函数声明 -PHP 快速入门 (24)》中我们了解到函数是由一些语句组织在一起的一种形式,定义函数是为了将程序按功能划分,方便程序的使用、管理以及维护等等。函数确实给我们的开发带来了很多便利,那函数写好之后,我们该如何调用呢?比如,我们现在定义了一个与机器人相关的函数,例如:对话,行走,搬运。。。等等。就像现在的一些人工智能音箱,我们呼唤他的时候,它能够回应我,给我反馈,我呼唤它,相当于我在调用对话这个函数,我呼唤的内容就是传入的参数,智能机器人的反馈就相当于函数中的返回值。我们接着继续看看在PHP中,函数具体该如何调用?
204 1