Blogger Information
Blog 46
fans 2
comment 0
visits 19476
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
1. 演示函数中引用外部变量的5种方法 2. 至少选择5个课堂上没讲到的字符串函数进行演示
P粉314265155
Original
313 people have browsed it

函数内部如何使用函数外部变量

  1. <?php
  2. namespace _0810;
  3. // 问题一、函数内部如何使用函数外部变量
  4. // 作用域
  5. // 1、不支持块作用域
  6. // 2、支持函数作用域
  7. // js
  8. // {
  9. // let a =1;
  10. // }
  11. // clg a 不能访问a
  12. // 1、 不支持块作用域
  13. if( true){
  14. $a =100;
  15. }
  16. // 可以拿到,虽然 a在 代码块中,但是在外边仍然可拿到
  17. echo $a .'<br>';
  18. // 2、支持函数作用域
  19. $name ='小狗';
  20. // 方式一 全局 关键字
  21. function hello():string {
  22. // js函数中可以直接访问自由变量(函数外部声明的遍历)
  23. // 但是在php中不行 。不能直接访问函数外部的全局 变量,但是有5种解决方案
  24. global $name;
  25. return 'hello,' .$name;
  26. }
  27. echo hello().'<hr>';
  28. /**
  29. * 函数内部使用外部变量的5种方式
  30. * 1. global 全局 关键字
  31. * 2. $GLOBALS['outer'] 超全局变量
  32. * 3. function () use ($outer) {...} use 关键字 闭包方式
  33. * 4. fn()=>(...) 箭头函数。php不建议容,功能比较弱
  34. * 5. function ($outer) {...} 参数注入
  35. */
  36. // 方式二超全局 数组
  37. function hello1():string {
  38. // js函数中可以直接访问自由变量(函数外部声明的遍历)
  39. // 但是在php中不行 。不能直接访问函数外部的全局 变量,但是有5种解决方案
  40. // return 'hello,' .$name;
  41. return 'hello,' .$GLOBALS['name'];
  42. }
  43. // print_r($GLOBALS);
  44. // $GLOBALS['name'] == $name
  45. // 可以拿到name 小狗
  46. // print_r($GLOBALS['name']);
  47. // 可以拿到name hello 小狗
  48. echo hello1().'<hr>';
  49. // 方式三unction () use ($outer) {...} use 关键字 闭包方式 匿名函数
  50. $name ='小猫';
  51. $hello3 =function( ) use ($name):string {
  52. return 'hel' .$name ;
  53. };
  54. echo $hello3().'<hr>';
  55. // 方式四 ,生产环境不用。 箭头函数 () 必须要加关键字 fn 规定 自动注入 多条语句时,不能用箭头函数 箭头后面就是表达式
  56. $name ='小牛';
  57. $hello4 = fn( ) => 'hel' .$name ;
  58. echo $hello4().'<hr>';
  59. // 方式五 纯函数:将函数依赖的外部数据,通过参数注入导函数内部
  60. $name ='小龙';
  61. $hello5 =function($name):string{
  62. return 'hel'.$name;
  63. };
  64. echo $hello5($name).'<hr>';
  65. // 问题二 如果在函数外部,如何访问 函数内部的声明变量
  66. // 方式一
  67. $hello21 =function(){
  68. // 私有变量 有作用域
  69. $username = '小鸭';
  70. return $username;
  71. };
  72. $user = $hello21();
  73. echo $user;
  74. // 方式二
  75. $hello22 =function(){
  76. // 私有变量 有作用域
  77. $username = '小鸭';
  78. // 如果 外部需要 这个私有变量 可以将它所谓返回数据的赠品来返回
  79. // 返回一个数组 【正常返回的数据,私有变量】
  80. return ['hello,',$username];
  81. };
  82. $user = $hello22()[1];
  83. echo $user;
  84. // 方式三 解构方式
  85. $hello23 =function(){
  86. // 私有变量 有作用域
  87. $username = '小社';
  88. // 如果 外部需要 这个私有变量 可以将它所谓返回数据的赠品来返回
  89. // 返回一个数组 【正常返回的数据,私有变量】
  90. return ['hello,',$username];
  91. };
  92. // 将数组成员,解构到独立变量中
  93. list($username ,$result) = $hello23();
  94. // list($username ,$result) = [$hello23()[0],$hello23()[1]]; 相等 解构
  95. echo $username ,$result ;
  96. // 问题3: 如果函数私有变量与外部变量同名怎么办?
  97. $name = '小张';
  98. $hello31 = function () use ($name) : string {
  99. // 私有变量
  100. $name = '小李';
  101. return 'Hello , ' . $name;
  102. };
  103. // 张老师, 还是李老师
  104. // 输出李老师, 因为函数内, 同名私有变量 $name 会覆盖外部同名变量
  105. echo $hello31(). '<hr>';

字符串声明

  1. <?php
  2. // 字符串 两种声明
  3. // 1、单引号
  4. // 2、双引号
  5. /**
  6. * 1. 纯文本
  7. * (1) 定界符: 单引号 / nowdoc
  8. * (2) 特点: 不解析变量, 不转义特殊符号的转义序列
  9. * (3) 场景: 静态文本,不含变量和转义符
  10. */
  11. // nowdoc 传统的单引号
  12. $domain = 'http://www.baidu.com';
  13. // \n\r 代表回车换行 但是在单引号里面原样显示。变量 $domain 不处理,不生效 不解析变量 适合大段文本
  14. $str = '网站名称 : \n\r $domain ' ;
  15. echo $str;
  16. // 语法糖// nowdoc 传统的单引号 适合写大段多行文本
  17. // 标识符
  18. $str = <<<'TEXT'
  19. <header>
  20. <nav>
  21. <a href="">首页</a>
  22. <a href="">视频</a>
  23. <a href="">文章</a>
  24. </nav>
  25. </header>
  26. TEXT;
  27. echo $str;
  28. /**
  29. * 2. 模板字符串
  30. * (1) 定界符: 双引号 / heredoc
  31. * (2) 特点: 解析变量, 转义特殊符号
  32. * (3) 场景: 包含插值变量和特殊字符的就动态模板
  33. */
  34. $site = "网站名称:\n\r $domain";
  35. echo $site;
  36. $site = "网站名称:\n\r \"$domain\"";
  37. echo $site;
  38. // 双引号 / heredoc 语法糖
  39. // 适用于大段的多行的动态文本内容,内部有变量和大量的双引号
  40. // html 模板 "
  41. $tp1 = <<< "PHPCN"
  42. <ul style="display: inline-block; border:1px solid ">
  43. <li>百度</li>
  44. <li style="color:brown">http://www.baidu.com</li>
  45. </ul>
  46. PHPCN;
  47. // 注意PHPCN; 顶格写
  48. echo $tp1;
  49. /**
  50. * 备注
  51. * 1. TXT, PHPCN: 只是标识符,全大写只是行业约定, 可任意命名,只要成对出现即可
  52. * 2. nowdoc的标识符,单引号必须写,如 'TXT'
  53. * 3. heredoc: PHPCN双引号是可选的, 例如 PHPCN也可以, 推荐不要写
  54. * 4. 更多转义序列: https://www.php.net/manual/zh/language.types.string.php#language.types.string.syntax.single
  55. */

常量

  1. <?php
  2. namespace _0810;
  3. use const _0810\EMAIL as _0810EMAIL;
  4. // 1、常量
  5. // 1.1、define()
  6. // 1.2、const()
  7. // 惯例全部大写,s蛇形命名,用下划线连接
  8. // 常量前面不加$符号 约定全部大写,蛇形命名 约定大于规则
  9. define('U_N','admin');
  10. const EMAIL = '123@qq.com';
  11. echo U_N , ',',EMAIL;
  12. /**
  13. * define, const 区别
  14. * 1. define是函数,可用在if中, 不能用在类中 不能预编译
  15. * 2. const: 编译阶段处理, 速度更快, 必须在作用域顶部声明,可用在类中, 不能用在if中
  16. * 3. 常量不受作用域限制 , 全局有效
  17. */
  18. function hello() : string{
  19. // return print_r(U_N,true);
  20. // return print_r(EMAIL,true);
  21. // return printf('<pre>%s</pre>',print_r(U_N,true));
  22. // return printf('<pre>%s</pre>',print_r(EMAIL,true));
  23. // return sprintf('<pre>%s</pre>',print_r(EMAIL,true));
  24. // return sprintf('<pre>%s</pre>',print_r(EMAIL));
  25. return sprintf(' %s %s',U_N,EMAIL);
  26. }
  27. echo hello();
  28. // constant( ) 显示一个常量
  29. echo U_N;
  30. echo constant('U_N');
  31. // const 声明的常量 不能用 constant 打印
  32. // echo constant('EMAIL');
  33. echo '<hr>';
  34. // 空字符合一当常量名 保存全局数据 如版本号、操作系统等
  35. define( '','php');
  36. // constant( ) 可以空字符
  37. // 空字符声明一个常量, 是否全法?
  38. echo constant('');
  39. // 不报错,完全合法,但你就是看不到
  40. echo '';
  41. // 自定义常量
  42. // 预定义常量、
  43. echo 'php版本'.PHP_VERSION.'<br>';
  44. echo '操作系统'.PHP_OS.'<br>';
  45. // 预定义常量的子集:魔术常量 前后缀有两个下划线
  46. // 它的值 是变化的 是由系统自动赋值与更新,用户不能修稿,只读
  47. echo '当前行号'.__LINE__.'<br>';
  48. echo '当前文件'.__FILE__.'<br>';
  49. echo '当前路径/目录'.__DIR__.'<br>';
  50. // 因为常量可以无视作用域, 可以在所有php脚本中, 横冲直撞, 无冕之王
  51. // 所以,特别适合保存一些全局可能用到,并且需要在所有脚本中保持数据一致的值,例如版本号
  52. // 这种由php系统定义, 程序员无须提前声明,可以直接拿来就用的常量,叫"预定义常量" 或"内置常量"
  53. // (2) 特殊的预定义常量: 魔术常量
  54. // 魔术常量,其实是预定义常量的一个子集
  55. // 为什么叫魔术常量?
  56. // 常量二大特征: 有确定的值, 具不能修改
  57. // 但是魔术常量, 没有确定的值,上系统自动更新维护,用户不能改,所以叫魔术常量

字符串 常量函数

  1. <?php
  2. namespace _0810;
  3. // 字符串 常量函数
  4. // 1、string <-> array
  5. // separator 分隔符
  6. // 1.1 数组转字符串 array-> string implode($separator,$arr):string
  7. $colors = ['red','green','blue'];
  8. echo implode(',',$colors);
  9. // 1.2 字符串转数组 string -> array explode($separator,$string)
  10. $link = 'mysql:dbname=phpedu;root;root';
  11. // 用 ; 分割上面的数据库连接参数
  12. // 注意 explode 里面的 ; 号是字符串 里面的分隔标识
  13. // $db = explode(';',$link);
  14. // print_r($db);
  15. // list($dsn,$user,$password) = explode(';',$link);
  16. // printf('dsn = %s<br>user=%s<br>password=%s<br>',$dsn,$user,$password);
  17. // 简化
  18. $arr = list($dsn,$user,$password) = explode(';',$link);
  19. vprintf('dsn = %s<br>user=%s<br>password=%s<br>',$arr);
  20. echo '<hr>';
  21. // 2、查询 与替换
  22. $str = 'phpbaidu';
  23. // substr($tr,start ,size)子串
  24. // 正向
  25. echo substr($str,0,3).'<br>';
  26. echo substr($str,4,2).'<br>';
  27. echo substr($str,4,0).'<br>';
  28. echo substr($str,4).'<br>';
  29. // 反向 -1 -2 -3 -4
  30. echo substr($str,-2,2).'<br>';
  31. // strstr :首次字符出现的位置之后的字符
  32. // 获取文件扩展名
  33. $img = 'banner.png';
  34. echo strstr($img,'.').'<br>';
  35. // 去掉扩展名 ltrim 左边 rtrim右边
  36. echo ltrim( strstr($img,'.'),'.').'<br>';
  37. // echo rtrim( strstr($img,'.'),'.').'<br>';
  38. // 获取文件名 增加 true
  39. echo strstr($img,'.',true).'<br>';
  40. // 获取位置 首次出现的索引
  41. // strpos 首次出现的索引
  42. // delete from staff where id =1
  43. echo strpos($str,'p').'<br>';
  44. // 第三个 设置起点
  45. echo strpos($str,'p',1).'<br>';
  46. // 字符串替换 str_replace
  47. // \admin\controller\User 类文件路径
  48. $class = '\admin\controller\User';
  49. // 注意要两个\不然会转义
  50. echo str_replace('\\','/',$class) .'<br>';
  51. echo str_replace('a','b',$class) .'<br>';
  52. // 考虑到不同操作系统, 路径分隔符不同,例如windows: "/,\", linux/max: /
  53. // echo str_replace('\\',DIRECTORY_SEPARATOR,$class).'<br>';
  54. // 简化重定义
  55. define('DS',DIRECTORY_SEPARATOR);
  56. echo str_replace('\\',DS,$class) .'<br>';
  57. $bad = ['交友','异性'];
  58. $goos = ['你好','吃饭'];
  59. $str = '我要某个交友软件,找了异性朋友';
  60. // $bad 和 $goos 一 一对应
  61. echo str_replace($bad,$goos,$str) .'<br>';
  62. $bad = ['交友','异性'];
  63. $goos = '***';
  64. $str = '我要某个交友软件,找了异性朋友';
  65. // $bad 和 $goos 一 一对应
  66. echo str_replace($bad,$goos,$str) .'<br>';
  67. // 3、删除指定字符
  68. $str = ' baidu.com ';
  69. echo strlen($str) .'<br>';
  70. // 空格过滤
  71. echo strlen(trim($str)) .'<br>';
  72. // 去掉指定字符
  73. // 从右边去
  74. $str = 'php.cn';
  75. echo rtrim($str,'.cn').'<br>';
  76. echo ltrim($str,'php.').'<br>';
  77. // 过滤html 标签
  78. echo strip_tags('<h1>php</h1>').'<br>';
  79. // 过滤 php 代码 过滤js 防止脚本注入
  80. echo strip_tags('<h1>php</h1><?php ecoh \'hello\' ?>').'<br>';
  81. // trim(string $string, string $characters = " \t\n\r\0\x0B"): string
  82. // 相关: ltrim(), rtrim(),仅删除左边或右边字符
  83. // strip_tags(string $string, string[]|string|null $allowed_tags = null): strings
  84. // 4、url相关
  85. $url = 'http://bittel.com/zuoye.php?a=1&b=2&c=3';
  86. // ?a=1&b=2&c=3 查询字符串 ,get请求 向服务器发送查询参数
  87. // "?"后面称为"查询字符串",用于GET请求是发送到后端的参数
  88. // 使用系统常量可获取到url中的查询字符串
  89. // print_r($_SERVER);
  90. // QUERY_STRING 获取查询字符串
  91. echo $_SERVER['QUERY_STRING'] . '<br>';
  92. // 查询字符串 保存到数组内
  93. parse_str( $_SERVER['QUERY_STRING'] ,$arr );
  94. printf('<pre>%s</pre>',print_r($arr,true));
  95. // parse_url()
  96. $arr = parse_url($url);
  97. printf('<pre>%s</pre>', print_r($arr,true) );
  98. echo parse_url($url)['query'];
  99. // 反函数 : 将数组转为查询字符串
  100. echo http_build_query(['a' => 1, 'b' => 2, 'c' => 3]) . '<br>';
Correcting teacher:PHPzPHPz

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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!