前两天讲过PHP基础知识的判断条件和流程控制,今天来讲讲PHP基础知识之PHP基础入门--函数!

一、函数的声明与使用

1、函数名是标识符之一,只能有数字字母下划线,开头不能是数字。

函数名的命名,须符合"小驼峰法则":myNameIsXiaoxi my_name_is_xiaoxi

函数名不区分大小写。func() Func() FUNC() 都可以

函数名不能与已有的函数名重复,不能与系统函数名重复。

2、function_exists("func1");用于检测函数是否已声明;

注意:传入的函数名,必须是字符串格式:返回结果为true/false。

二、PHP中变量的作用域

1、局部变量:声明在函数内部的变量,称为局部变量。只在函数内部能用,函数外加需使用,需在函数中使用return关键字返回。

2、全局变量:声明的函数外部的变量,称为全局变量。

3、函数中,使用变量,默认使用内部局部变量。如果,需在函数中使用全局变量,需要使用global关键字,将全局变量引用函数,才能使用。

函数中的变量名,如果与全局变量重复,global语句之上,为函数局部变量;global语句之下,为系统全局变量。

4、 $GLOBALS[]全局数组:

$GLOBALS[]数组,是PHP给我们内置的全局数组,可以直接给数组添加值,无论在函数内外声明,均可在任何地方直接使用。

$GLOBALS["a"] = 10; ---> echo $GLOBALS["a"];//任何位置直接使用

5、函数中使用全局变量,还有一种方式:通过给函数传参,可以在函数内部使用全局变量;

但是,传递以后的参数是函数的局部变量,内部改变,外部不会变。

除非,传递的参数是地址function func($a1,&$a2){} //函数内部修改a1,则全局a1不会变,函数内部修改a2,则全局a2会变。

如果函数的形参,出现了取址符号,则,调用函数时,实参必须是变量,而不能是字面量。

6、使用require与include包含不会影响作用域。

三、静态变量

1、静态变量,使用static关键字声明。static $num = 10;

2、静态变量的特点:

>>>静态变量在函数第一次加载的时候进行声明。

>>>函数使用完不会立即释放静态变量,静态变量在整个脚本执行过程中,只会声明一次。

>>>同一函数,多次调用,共享同一个静态变量。

四、函数的参数传递

1、在PHP中,涉及参数传递时:实参列表只能比形参多,

2、常规参数传递:function func($a){} func($a);

3、引用参数传递:function func(&$a){} func($a);

①通过&引用参数传递,函数内修改变量,函数外同步变化

②形参为引用参数,实参只能是变量,不能是字面量 func(10); ×

4、默认参数:function func($b,$a=10){} func(20);

//是$可以不传,默认为10;$b必须传递,否则使用时未定义报错。

如果参数中既有默认参数,也有非默认参数,那么默认参数列表

必须要在非默认参数列表后面,即调用的时候必须保证非默认列表的优先赋值。

5、可变参数列表:由于PHP实参可以比形参多,那么我们可以传递N个实参,并通过PHP内置函数取到对应参数。

var_dump(func_get_args());//取所有参数列表(数组)

var_dump(func_num_args());//返回参数的总个数相当于count(func_get_args());

var_dump(func_get_arg(0));//根据下标,返回每个参数

五、变量函数

1、将一个函数名,转为字符串后,赋给一个变量。这个变量,就是我们所说的变量函数,可以加()调用函数内容。

function func(){}--->$fun = "func";--->$func();

六、回调函数

1、使用变量函数,自定义回调函数

function func($func){$func();}--->function f(){}--->func("f");

2、使用call_user_func_array和call_user_func自定义回调函数;

两个函数的第一个参数,均为回调函数,表示执行当前回调。

不同点在于:call_user_func_array()第二个参数为数组,并将数组的每一个值赋给回调函数的参数列表,相当于JS中的apply();

而call_user_func,是将回调函数的参数列表,直接展开写到第2~多个参数中,相当于JS中的call();

eg:call_user_func_array("func",array(1,2,3));

--> func(1,2,3);

call_user_func("func",1,2,3); --> func(1,2,3);

七、匿名函数

由于变量函数,在调用时存在多种调用方(func()/$func();)

所以为了让函数的调用更为同一,才产生了匿名函数!!!

声明匿名函数,函数体后面的分号必不可少!

匿名函数本身也是变量,用var_dump();检测为Object类型

八、PHP闭包

在PHP中,子函数无法直接访问父函数的局部变量,必须使用User关键词向下传递!!!

文章收集与网络,辛苦收集转载请备注出处一只大脸猫!

PHP丨PHP基础知识之流程控制WHILE循环「理论篇」

PHP丨PHP基础知识之条件语IF判断「理论篇」

PHP丨PHP基础知识之条件语SWITCH判断「理论篇」

PHP丨PHP基础知识之PHP基础入门——函数「理论篇」的更多相关文章

  1. PHP丨PHP基础知识之流程控制WHILE循环「理论篇」

    昨天讲完FOR循环今天来讲讲他的兄弟WHILE循环!进入正题: while是计算机的一种基本循环模式.当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环.while语句的一般表达式为:whil ...

  2. PHP丨PHP基础知识之条件语IF判断「理论篇」

    if语句是指编程语言(包括c语言.C#.VB.java.php.汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一. if语句概述 if语句是指编程语言(包 ...

  3. PHP丨PHP基础知识之条件语SWITCH判断「理论篇」

    Switch在一些计算机语言中是保留字,其作用大多情况下是进行判断选择.以PHP来说,switch(开关语句)常和case break default一起使用 典型结构 switch($control ...

  4. PHP丨PHP基础知识之流程控制for循环「理论篇」

    今天公司同事在看for循环,那么我们今天就来讲讲for循环吧! for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体 ...

  5. [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...

  6. Greenplum入门——基础知识、安装、常用函数

    Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...

  7. day01<计算机基础知识&Java语言基础>

    计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...

  8. Python基础知识详解 从入门到精通(七)类与对象

    本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...

  9. python基础-基础知识考试_day5 (包括:函数_递归等知识)

    老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, '', [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有数的和, ...

随机推荐

  1. vue 上拉刷新组件

    背景,项目中经常会出现需要上拉加载更多或者下拉刷新的需求,一直以来呢都是借用各种UI库来实现,但是不知道啥情况,最近在使用的时候,一直有问题,出不了效果,然人很恼火,于是只能自己动手来实现以下, 这次 ...

  2. 剑指offer——数据结构

    技术面重点:数组.字符串.链表.树.栈以及队列.

  3. 13.Java连接Redis_Jedis_事务

    Jedis事务我们使用JDBC连接Mysql的时候,每次执行sql语句之前,都需要开启事务:在MyBatis中,也需要使用openSession()来获取session事务对象,来进行sql执行.查询 ...

  4. JavaScript 实现 冒泡排序

        <script>         //数组排序(冒泡排序)         //冒泡排序是一种算法,把一系列的数据按照一定的循序进行排列显示(从小到大或从大到小)          ...

  5. 用python编写测试脚本

    def f(n): """ >>>f(1) 1用例 >>>f(2) 2用例 ...... >>>f(n) n用例 & ...

  6. 实验三 UML 建模工具的安装与使用

    UML 建模工具的安装与使用一. 实验目的1) 学习使用 EA(Enterprise Architect) 开发环境创建模型的一般方法: 2) 理解 EA 界面布局和元素操作的一般技巧: 3) 熟悉 ...

  7. Java实现 LeetCode 713 乘积小于K的子数组(子集数量+双指针)

    713. 乘积小于K的子数组 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解 ...

  8. Java实现 LeetCode 669 修剪二叉搜索树(遍历树)

    669. 修剪二叉搜索树 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R.通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) .你可能需要改变树的根节点,所以结果应当返回 ...

  9. Java实现 LeetCode 912 排序数组(用数组去代替排序O(N))

    912. 排序数组 给你一个整数数组 nums,将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0, ...

  10. Java实现 LeetCode 43 字符串相乘

    43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2& ...