函数

和js函数相似,关注php与其它语言不用的地方

  • 函数的形參默认值

    形式:

    function f($a,$b=3,$vc = "abc"){
    
    }

    注意:没有给默认值的形參必须传递值,

  • 形參的传值问题

    一句话:形參的传值问题。事实上就是“变量之前的传值问题”,即实參变量传给形參变量。有值传递和引用传递

    引用传递(须要在形參前面加&符号而不是实參):

    function f($a,& $b){
    
    }
  • 函数參数的数量的问题

    1. 通常,形參和实參的数量是一致的;
    2. 当函数形參有默认值的时候。实參能够进行一定程度的省略(省略仅仅能从右往左省略)。
    3. 有一种定义和使用函数的特别形式(并不常见)它不定义形參,而实參随意给出。事实上系统中也有相似的函数:比方: – 灵活性体现之中的一个

      1. var_dump($v1);
      2. var_dump($v1,$v2,$v3);

      我们自己也能够定义这样的函数。事实上,这样的函数。依赖的是下面三个系统函数来获取相应的信息。以得到实參数据的处理:

      1. func_get_args(); // 获取实參数据列表,成为一个数组
      2. func_get_args(i);//获取第i个实參数据,$i从0開始算起
      3. func_num_args(); // 获取实參的数量(个数)

      如:

      // 系统函数func_get_args()能够获取函数调用时传递过来的全部实參数据,而且都放入一个数组中!
      function f(){
      $arr = func_get_args();
      }

函数的返回值:函数的返回值不是语法规定。而是业务所需,须要就返回。不须要则无需返回,返回值一定是通过return 语句!

函数的其它形式:

  • 可变函数:一个变量的名字是一个变量 – > 灵活性体现
  • 可变变量:一个函数的名字是一个变量,事实上就是在调用函数的时候,使用一个变量名而已,该变量的内部,就是该函数名! – > 灵活性体现

匿名函数

形式1:将一个匿名函数“赋值”给一个变量,然后通过该变量调用该函数

$f1 = function (){

};

使用:

$f1(); // 调用该匿名函数,和可变函数使用一样的

形式2:直接将匿名函数作为另外一个函数的实參传递进去(由于形參相应的是一个函数)

如:

function f1($a,$b,$sum){
echo "$a =".$a;
echo "$b =".$b;
$result = $sum($a,$b);
echo "result = ".$result;
}
调用:
f1(21,2,function ($a,$b){
returm $a + $b;
});

变量作用域

定义:变量能够使用的范围

php中有三种作用域

  • 局部作用域:在函数内部范围,相应的变量为局部变量
  • 全局作用域:不在函数内部的范围,–函数外部和代码块中的定义的变量是全局变量

  • 超全局作用域:指全部的代码范围。就称为超全局变量。事实上仅仅有系统提前定义的几个:$_GET,$POST,$_SERVER,$_SESSION,$_REQUEST,$GLOBALS,$_FILES,$_COOKIE..

通常:

  • 全局范围不能訪问局部范围;
  • 局部范围不能訪问全局范围;
  • 函数内部的变量(局部变量),通常在函数调用运行结束后,就被“销毁”了;
  • 有一种局部变量,在函数调用结束后不会被“销毁”,这样的变量就是静态局部变量(用static修饰)。

局部作用域使用(訪问)全局变量?(常见需求)

php中不能像其它语言一样直接在局部作用域中訪问全局变量,

做法1:而要使用global声明一个要使用的全局变量的同名局部变量

     如:

        $v = 4;
function f(){
global $v; // 使用global声明一个变量,该变量和全局变量同名。并和全局变量共同指向一个数据区,,相当于复制了引用
} 做法2:通过$GLOBALS提前定义变量訪问全局变量,如 $v = 1;
function f(){
echo "\$v = ".$GLOBALS['$v']; // 取得全局变量$v的值
$GLOBALS['$v'] = 55; // 改变全局变量$v的值
unset($GLOBALS['$v']); // 释放$v变量,此时全局变量$v就变成null了
} 但,假设我们对$GLOBALS变量的某个单元(下标)进行unset,则其就会全然销毁相应的全局变量。这里不是复制了引用

有关函数的系统函数:

  • function_exists(函数名) : 推断一个函数是否存在
  • func_get_args();
  • func_get_args($index);
  • func_num_args()。

php函数,static,globalkeyword及三种变量作用域的更多相关文章

  1. javascript中var let const三种变量声明方式

    javascript中var let const三种变量声明方式 1.var  ①var表示声明了一个变量,并且可以同时初始化该变量. ②使用var语句声明的变量的作用域是当前执行位置的上下文:一个函 ...

  2. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)——VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  3. (转)在网页中JS函数自动执行常用三种方法

    原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中 ...

  4. Bat 参数去引号(各种去引号的奇葩方式,三种变量互转),普通变量不能直接去掉外层引号

    很多情况下,我们需要脱除一个字符串中可能会存在的引号,然后在加上自己的引 号使其中的特殊字符(命令连接符& .| .&&.||,命令行参数界定符Space .tab . ; . ...

  5. 在网页中JS函数自动执行常用三种方法

    在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   function ...

  6. linux shell自定义函数(定义、返回值、变量作用域)介绍

    http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell ...

  7. c语言 函数传输传递的三种方式(值、指针、引用)

    本文摘自<彻底搞定c指针> 一.三道考题开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, in ...

  8. smarty中三种变量的访问方式

    在模板中smarty有三种变量,第一种,php分配的变量,第二种配置文件里的变量,第三种,PHP全局数组里的变量,配置文件里变量的访问方式可以是{#bgcolor#},"#"必须紧 ...

  9. JavaScript中的方法事件和函数的方法的三种方法

    js中的很多事件  而事件相对应的就是方法(函数 )那么今天所说的就是这三种方法      已onclick事件为例 1: 基本方法 <div id="a" onclick= ...

随机推荐

  1. 字典(dictionary)与映射(map)

    1. 字典:key-value 键值对 反转字典:reverse_dict = dict(zip(D.values(), D.keys())) 前提要保证 D 的 value 不会出现重复,因为字典反 ...

  2. centos 7.3 配置vnc 服务 图形界面登录

    1.检查系统是否有安装tigervnc-server软件包 rpm -qa |grep vnc 默认的系统未装tigervnc-server软件包 2.安装tigervnc-server软件包 yum ...

  3. Python(十一) 原生爬虫

    一.分析抓取目的确定抓取页面   #爬取主播人气排行 二.整理爬虫常规思路   爬虫前奏 明确目的 找到数据对应的网页 分析网页的结构找到数据所在的标签位置 模拟 HTTP 请求, 向服务器发送这个请 ...

  4. C/C++(C++类型增强)

    C++类型增强 类型检查更严格 把一个const类型的指针赋给非const类型的指针.c语言中可以通的过,但是在c++中则编不过去 const int a = 10; a = 100;//const修 ...

  5. 浅述html5和web app

    题外话:最近跟不少产品解释技术术语,比如脚本.数据库.H5等等,我一般会把他们当成稍微了解这些技术的人,用专业的语言描述一遍,然后用通俗的语言解释一遍,最后举例子解释一遍. 肯定有人问,你把流程反过来 ...

  6. CODEVS——T1961 躲避大龙

    http://codevs.cn/problem/1961/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 De ...

  7. dlmalloc 2.8.6 源代码具体解释(5)

    本文章由vector03原创, 转载请注明出处. 邮箱地址: mmzsmm@163.com, 欢迎来信讨论.     3. 分配及实现 本章节介绍dlmalloc的分配算法和实现.由于存在多mspac ...

  8. vim 技巧之用宏命令批量处理文件

    今天遇到了一种情况,就是我需要同时修改34个文件中的某些字符串的内容,如果一个个打开需改的话,那也太麻烦了.后来就想着能不能通过vim的宏命令来修改呢?现在就总结下关于宏在文件列表中的应用1.首先,我 ...

  9. OpenCV特征点检测——Surf(特征点篇)&flann

    学习OpenCV--Surf(特征点篇)&flann 分类: OpenCV特征篇计算机视觉 2012-04-20 21:55 19887人阅读评论(20)收藏举报 检测特征 Surf(Spee ...

  10. ArraySegment 的使用 【转载】

    本文转载自 http://www.cnblogs.com/overred/archive/2009/01/17/1359126.html ArraySegment顾名思义就是Array区块,数组的小抽 ...