Blogger Information
Blog 37
fans 2
comment 0
visits 26440
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0128- 实例演示函数作用域与闭包,回调的使用场景与参数调用
世纪天城
Original
620 people have browsed it

函数作用域
<?php

// 1.php: 全局作用域

// 声明在函数外部的成员,默认就是全局成员

  1. $name = '你好';
  2. $res = 'php';

// 2.php 函数作用域: 只有调用它的时候才会创建

  1. function a($id): string
  2. {
  3. $a=$id;
  4. return $a;
  5. }

// php函数作用域: 只有调用它的时候才会创建

// 此时函数里面的$a成员才会被创建并访问

// 由于在函数内部无法访问函数外部的成员,但如果想在函数内部访问全局或者外部的成员有以下种方式可以在函数内部访问外部成员

  1. global

    1. function b(): string
    2. {
    3. // 用global将外部成员导入函数内部
    4. global $name;
    5. global $res;
    6. return $name.$res;
    7. }
  1. $GLOBALS,超全局数组不受作用域限制

    1. function c():string
    2. {
    3. return '1: '.$GLOBALS['name'].' 2: '.$GLOBALS['res'];
    4. }

php闭包: 匿名函数

// 1.闭包: 就是匿名函数,可以访问函数外部的自由变量也就是父作用域中的变量

  1. $name='张三';
  2. $age ='20';

// 用use关键字将外部成员引入函数即可

  1. $a =function() use($name,$age){
  2. return '姓名: '. $name .'年龄: '.$age;
  3. };
  4. echo $a();
  5. echo '<hr>';

// 2.闭包支持引用传参: 只需在参数前加 &

// 闭包中将引用参数更新后,会实时的映射到外部的原始参数中 实现实时更新外部数据

  1. $b =function($age1) use($name,&$age){
  2. $age=$age1;
  3. return '姓名: '. $name .'年龄: '.$age1;
  4. };
  5. echo $b(18);
  6. echo '<hr>';

// 注意:use禁止使用以下三种参数

// 1. 超全局不让用: $_GET

// 2. $this

// 3. 与当前参数重名不让用

// 3.闭包经常用作函数的返回值

  1. function b($name){
  2. // 返回一个函数,php闭包函数最佳使用场景
  3. // 但要记住闭包函数必须返回
  4. return function ($age)use($name){
  5. return sprintf('姓名:%s 年龄:%s',$name,$age);
  6. };
  7. }
  8. echo b('王五')('18');

json格式的字符串

转为通用的json格式的字符串
这样就可以与其它编程语言进行数据交换,例如与前端js,java,python…
JSON_UNESCAPED_UNICODE 为中文 不需要转码

  1. function d(){
  2. return json_encode(['res' => '1', 'msg' => '登录成功'],JSON_UNESCAPED_UNICODE);
  3. }
  4. $res1 = d();
  5. // 如果当前脚本接收到一个前端或其它接口发送过来的json格式的数据,可以进行解析
  6. // 解析的目的是将外部的json还原成php能够处理的数据类型
  7. $str = json_decode($res1);
  8. if($str -> res==='1'){
  9. printf('%s',$str->msg);
  10. }

如果不喜欢对象的方式访问,也可以使用数组方式
给 json_decode()传入第二个参数 : true

  1. $str1 = json_decode($res1, true);
  2. if($str1['res']==='1'){
  3. printf('%s',$str1['msg']);
  4. }
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post