Maison >développement back-end >tutoriel php >Explication détaillée des fonctions PHP et connaissance de la portée
Cet article vous apporte des connaissances pertinentes sur PHP, qui présente principalement des problèmes liés aux fonctions et à la portée, y compris les conventions de dénomination des fonctions, les valeurs de retour des fonctions, les fonctions variables, les fonctions anonymes, etc. sera utile à tout le monde.
Étude recommandée : "Tutoriel vidéo PHP"
La fonction a plusieurs points clés correspondants :Fonction : une fonction est une structure grammaticale qui encapsule un bloc de code. (plusieurs lignes de code) qui implémente une certaine fonction dans un structure pour réaliser la réutilisation du code (réutilisation). 2. Grammaire de base
La syntaxe de base est la suivante :
C'est réaliser la réutilisation du code, une fonction par fonction (simple et clair).Function 函数名([参数]){ //函数体,基本上所有的代码都可以实现,定义变量、定义常量、使用流程控制(分支、循环)、可以调用函数。 //返回值:return 结果; }Le but de la définition des fonctions :
La fonction est appelée lors de la phase d'exécution du code, lorsque le nom de la fonction est rencontré, pas lors de la phase de compilation. Caractéristiques d'appel de fonction :
Tant que le système peut trouver la fonction correspondante dans la mémoire, elle peut être exécutée (la fonction peut être appelée avant que la fonction ne soit définie)Analyse en mémoire de l'exécution de la fonction :
Lire le code dans le segment de code (compiler : convertir le code en bytecode et le stocker en mémoire)
Exécuter ligne par ligne selon le code -
- La compilation et l'exécution sont séparées (compiler d'abord puis exécutez)
- 3. Convention de dénomination des fonctions
Méthode Camel : À l'exception du premier mot à gauche, les premières lettres de tous les mots suivants sont en majuscules : showParentInfo()
- Méthode Underline : Les mots sont reliés par des soulignements et le les mots sont en minuscules : show_parent_info()
- 4. Paramètres formels et paramètres réels
Paramètres réels : les paramètres réels, paramètres ayant une signification pratique, sont des paramètres utilisés lors de l'appel de fonctions.
La relation entre les deux : le paramètre formel est le porteur du paramètre réel : lorsque le paramètre réel est appelé, il faut généralement le passer dans la fonction pour participer au calcul (opération), donc vous besoin de trouver l'emplacement des données réelles à l'intérieur de la fonction. Rechercher les données elles-mêmes : lorsqu'elles sont réellement appelées, transmettre les données aux paramètres formels sous la forme de paramètres réels : attribuer des valeurs aux paramètres formels, afin qu'ils soient externes. les données peuvent être utilisées à l’intérieur de la fonction.
<h3>函数参数形参和实参</h3> <?php header("Content-type:text/html;charset=gbk"); //定义函数 function jia($a,$b){ //形参可以有多个,逗号,隔开 echo $a + $b;//函数体使用形参运算 }; $num = 10;//定义实参 jia($num,2);//传入实参,实参可以是变量、常量、运算结果等 ?>
- 在PHP中允许实参多余形参(个数):函数内部不用而已
- 在PHP中理论上形参个数没有限制(实际开发不会太多)
- 实参不能少于形参个数。
五、形参默认值
默认值:default value,指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值:如果实际调用传入的参数(实参)没有提供,那么形参就会使用定义时的值来进入函数内部参与运算。通常默认值是用在一些,一定会有某个数据参与,但是可能通常是某个我们知道的值。
<h3>形参默认值</h3> <?php header("Content-type:text/html;charset=gbk"); $a = 10;//定义实参 //定义函数 function jia($a = 6,$b = 4){ //此时$a是实参,编译不执行,属于jia函数内部,跟外面的$a=10不冲突。 echo $a + $b;//10 + 4 = 14 }; jia($a);//调用$a,有传参就是10,$b是4,所以值就是14 echo "<hr/>"; echo $a;//10 ?>注意:默认值的定义是放在最右边的(多个),不能左边形参有默认值,但是右边没有函数外部定义的变量名字与函数定义的形参名字冲突(同名)是没有任何关联关系的;如果多个函数使用同样的形参名字也不冲突。
六、实参引用传递
实参在调用时会将值赋值给形参,那么实际上使用的方式就是一种简单的值传递:将实参(如果是变量或者常量或者其他表达式)的结果(值)取出来赋值给形参:形参与外部实际传入的参数本身没有任何关联关系:只是结果一样。有的时候,希望在函数内部拿到的外部数据,能够在函数内部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部数据的内存地址。以上这种定义形式参数的方式叫作引用传值。
基本定义语法:
Function 函数名(形参1,&形参2){
//函数体
}
<h3>引用传递</h3> <?php header("Content-type:text/html;charset=gbk"); function xiao($x,&$y){ //定义函数xiao() $x = $x * $x; $y = $y * $y; //修改两个形参的值 echo $x;echo "<hr>";echo $y,"<hr>"; }; $x = 4;$y = 2;//定义变量 xiao($x,$y); echo $x,"<hr>",$y,"<hr>"; ?>思考:两者对比,为什么第二个y变成了4?
参考:php——三篇夯实根基第一篇_xiaochuhe.的博客-CSDN博客里面的变量引用赋值。
注意:引用传值注意事项:在传入实参的时候,必须传入变量!!!
七、函数返回值(return)
返回值:return,指的是将函数实现的结果,通过return关键字,返回给函数外部(函数调用处):在PHP中所有的函数都有返回值。(如果没有明确return使用,那么系统默认返回NULL。
<h3>函数返回值</h3> <?php header("Content-type:text/html;charset=gbk"); function chuhe(){//定义函数 echo __FUNCTION__;echo '<hr/>';//输出当前函数的名称 echo __FILE__;echo '<hr/>';//输出当前文件名的绝对路径 }; //chuhe();echo '<hr>'; var_dump(chuhe());返回值作用:将计算结果返回给调用处,并且函数的返回值可以是任意数据类型。
<h3>函数返回值——Retrun</h3> <?php header("Content-type:text/html;charset=gbk"); function jia($x,$y){ return $x + $y;//return直接结束jia函数 echo $x; //注意,此时echo函数不执行 }; $num =jia(4,5);//9 echo $num;
- return在函数内部存在的价值:返回当前函数的结果(当前函数运行结束)
- return还可以在文件中直接使用(不在函数里面):代表文件将结果return后面跟的内容,转交给包含当前文件的位置。(通常在系统配置文件中使用较多),在文件中也代表中终止文件后面的代码:return之后的内容不会执行。
八、作用域
作用域:变量(常量)能够被访问的区域
- 变量可以在普通代码中定义
- 变量也可以在函数内部定义
作用域分类:
- 全局变量
- 局部变量
- 超全局变量
1.全局变量
全局变量:就是用户普通定义的变量(函数外部定义)
所属全局空间:在PHP中只允许在全局空间使用:理论上函数内部不可方法
脚本周期:直到脚本运行结束(最后一行代码执行完)
<h3>全局变量</h3> <?php header("Content-type:text/html;charset=gbk"); $global = "这是全局变量!"; //定义变量 function chuhe(){ $inner = __FILE__;//局部变量 echo $global; //肯定是报错的,函数内部肯定是访问不了全局变量滴 }; chuhe();//调用函数2.局部变量
局部变量:就是在函数内部定义的变量
所属当前函数空间:在PHP中只允许在当前函数自己内部使用
函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)
<h3>局部变量</h3> <?php header("Content-type:text/html;charset=gbk"); $global = "这是全局变量!"; //定义变量 function chuhe(){ $inner = __FILE__;//局部变量 //echo $global; //肯定是报错的,函数内部肯定是访问不了全局变量滴 }; chuhe();//调用函数 echo $inner;//访问局部变量,也是报错的3. 超全局变量
超全局变量:系统定义的变量(预定义变量:$_SERVER、$_POST等)
所属超全局空间:没有访问限制(函数内外都可以访问)
超全局变量会将全局变量自动纳入到$GLOBALS里面,而$GLOBALS没有作用域限制,所以能够帮助局部去访问全局变量:但是必须使用数组方式。
(1)内部调用外部
<h3>超全局变量</h3> <?php header("Content-type:text/html;charset=gbk"); $global = "这是全局变量!"; //定义变量 function chuhe(){ $inner = __FILE__;//局部变量 echo $GLOBALS['global'];//讲全局变量纳入$GLOBALS里面 }; chuhe();//调用函数(2)外部调用内部
<h3>超全局变量</h3> <?php header("Content-type:text/html;charset=gbk"); $global = "这是全局变量!"; //定义变量 function chuhe(){ global $inner; //定义变量,使用全局变量。 $inner = __FILE__;//局部变量 }; chuhe();echo $inner;//调用函数,并访问局部变量4.静态变量
静态变量:static,是在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量:函数运行结束所有局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化。
基本语法:
Function 函数名(){
//定义变量
Static $变量名 = 值; //通常会在定义的时候就直接赋值
}
<h3>静态变量</h3> <?php header("Content-type:text/html;charset=gbk"); function xiao(){ $a = 2;//定义变量 static $b = 3;//定义静态变量 echo $a++;echo "<hr>"; echo $b++;echo "<hr>"; }; xiao();//调用函数 xiao();//再调一次 xiao();//再调一次静态变量的作用是为了跨函数共享数据(同一个函数被多次调用) 。
九、可变函数
当前有一个变量所保存到值,刚好是一个函数的名字,那么就可以使用变量+()来充当函数名使用。
<h3>可变函数</h3> <?php header("Content-type:text/html;charset=gbk"); function chu(){ echo __FILE__;echo __FUNCTION__;echo __LINE__; } $xiao = "chu";//定义变量 $xiao();//调用可用函数附加思考:
<h3>可变函数</h3> <?php header("Content-type:text/html;charset=gbk"); function xiao($a,$b){ //假设定义系统函数 $b = $b + 6; return $a($b);//chuhe(16) } function chuhe($c){ return $c * $c * $c; //定义一个用户函数,求该函数的3次方 } echo xiao('chuhe',10);//16*16*16 echo "<br>","懵了吧,多想想就懂了!"; //懵了吧,多想想就懂了!!
十、匿名函数
没有名字的函数,变量保存匿名函数,本质得到的是一个对象(Closure)。
<h3>函数</h3> <?php header("Content-type:text/html;charset=gbk"); $xiaofeng = function(){ //定义匿名函数 echo "我是萧风!"; }; $xiaofeng();echo "<hr>";//调用匿名函数 var_dump($xiaofeng);//查案变量类型及内容
十一、闭包函数
闭包:closure, 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)
<h3>闭包函数</h3> <?php header("Content-type:text/html;charset=gbk"); function xiaofeng(){ $inner = __FILE__;//定义局部变量 #定义匿名函数 $chuhe = function() use($inner){//用use讲局部变量保留给内部使用闭包 echo $inner; }; $chuhe();//调用函数 } xiaofeng();思考:函数使用完后局部变量有没有被释放?
<h3>闭包函数</h3> <?php header("Content-type:text/html;charset=gbk"); function xiaofeng(){ $inner = __FILE__;//定义局部变量 #定义匿名函数 $chuhe = function() use($inner){//用use讲局部变量保留给内部使用闭包 echo $inner; }; return $chuhe();//返回内部匿名函数 } $closure = xiaofeng();//理论上局部变量inner已经释放了 $closure();
十二、伪类型
伪类型:假类型,实际上在PHP中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。
伪类型主要有两种:在三大类八小类之外
- Mixed:混合的,可以是多种PHP中的数据类型
- Number:数值的,可以是任意数值类型(整形和浮点型)
十三、常用系统函数
(一)关于输出的函数
- print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回1,可以不需要使用括号
- print_r():类似于var_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)
(二)关于时间的函数
- date():按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数),如果没有指定特定的时间戳,那么就是默认解释当前时间戳
- time():获取当前时间对应的时间戳
- microtime():获取微秒级别的时间
Strtotime():按照规定格式的字符串转换成时间戳
<h3>时间函数</h3> <?php header("Content-type:text/html;charset=gbk"); echo date('Y 年 m 月 d 日 H:i:s',987654321);echo "<hr>"; echo time();echo "<hr>"; echo microtime();echo "<hr>"; echo strtotime(" 10 hours");(三)关于数学的函数
- max():指定参数中最大的值
- min():比较两个数中较小的值
- rand():得到一个随机数,指定区间的随机整数
- mt_rand():与rand一样,只是底层结构不一样,效率比rand高(建议使用)
- round():四舍五入
- ceil():向上取整
- floor():向下取整
- pow():求指定数字的指定指数次结果:pow(2,8) == 2^8 == 256
- abs():绝对值
- sqrt():求平方根
(四)关于自定义函数的函数
- function_exists():判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)
- func_get_arg():在自定义函数中去获取指定数值对应的参数
- func_get_args():在自定义函数中获取所有的参数(数组)
- func_num_args():获取当前自定义函数的参数数量
<h3>自定义函数</h3> <?php header("Content-type:text/html;charset=gbk"); echo "<pre class="brush:php;toolbar:false">"; function xiao($a,$b){ print_r(func_get_arg(1));echo "<hr>";//获取指定参数 print_r(func_get_args());echo "<hr>";//获取所有参数 print_r(func_num_args());;echo "<hr>";//获取参数数量 } xiao(1,2);//调用函数 echo "<br>"; function_exists('xiao') && xiao(1,'2');//在调用函数时,判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)推荐学习:《PHP视频教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!