在分析Oauth 2.0的的一个开源服务端代码时,因为我是用netbeans来查看,在边上给了一些黄色感叹号的提示信息,提示变量没有初始化。我仔细查看上下文,确实没有初始化,但是代码执行是准确的,非常奇怪。后来我注意到一个方法extract,这才找到原因所在。

php中的extract方法可以将数组中的数据转换到当前上下文环境,其中key作为变量名,value作为变量的值。示例代码:

$user = array(

'name' => 'tom'

,'age' => 20

);

extract($user);

echo $name; //输出tom

echo $age; //输出20

但是这样获取变量的方式比较隐秘,用一句俗话来说就是藏的很深,我个人认为不利于代码阅读。比如下面代码:

$name = 'anny';

$user = array(

'name' => 'tom'

);

extract($user);

echo $name; //输出tom

$name在初始的时候被赋值为anny,但是经过extract后,$name就变成了tom,初始的赋值被覆盖了。这边代码比较简单还容易看的出来,如果是在比较复杂的代码里,有时就会纳闷了——到底哪里对$name进行重新赋值了?为什么搜索$name这个变量都搜索不到重新赋值的地方?

针对变量被覆盖这个问题,extact提供了另外两个参数,来避免这个问题,看下面代码:

$name = 'anny';

$user = array(

'name' => 'tom'

);

extract($user, EXTR_SKIP); //增加了EXTR_SKIP这个参数

echo $name; //输出anny

这边加入了一个新参数EXTR_SKIP,表示不覆盖原有的变量。

也可以使用EXTR_PREFIX_ALL来为转换出来的变量名称增加前缀,看下面代码:

$name = 'anny';

$user = array(

'name' => 'tom'

);

extract($user, EXTR_PREFIX_ALL, 'user');

echo $name; //输出anny

echo $user_name; //输出tom

前缀和数组键名之间会自动加上下划线。

第二个参数还有其它的模式,详情可以参考官方手册。尽管extract提供了其它参数使得运用多样化,但是我个人还是不建议使用。如果要使用的话,尽量保证上下文代码简短,这样也方便阅读代码。

php extraxt,php中关于extract方法的使用和建议相关推荐

  1. python extract方法_在多个项目类中使用extract方法

    我不是一个有经验的程序员,不要生我的气- 我正在探索一些小的可能性(我有一些Python编程技巧).在 废弃一个网站:让我们想象一下,我们可以从opengraph(og:)中提取一些信息,比如&quo ...

  2. 转载-----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议6~10)...

    阅读目录 建议6:覆写变长方法也循规蹈矩 建议7:警惕自增的陷阱 建议8:不要让旧语法困扰你 建议9:少用静态导入 建议10:不要在本类中覆盖静态导入的变量和方法 回到顶部 建议6:覆写变长方法也循规 ...

  3. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

                 The reasonable man adapts himself to the world; The unreasonable one persists in trying ...

  4. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议6~10)...

    建议6:覆写变长方法也循规蹈矩 在JAVA中,子类覆写父类的中的方法很常见,这样做既可以修正bug,也可以提供扩展的业务功能支持,同时还符合开闭原则(Open-Closed Principle). 符 ...

  5. java代码优化的方法和准则_编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)...

    建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它 ...

  6. 转载--编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)...

    阅读目录 建议16:易变业务使用脚本语言编写 建议17:慎用动态编译 建议18:避免instanceof非预期结果 建议19:断言绝对不是鸡肋 建议20:不要只替换一个类 回到顶部 建议16:易变业务 ...

  7. 转载--编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议11~15)...

    阅读目录 建议11:养成良好习惯,显示声明UID 建议12:避免用序列化类在构造函数中为不变量赋值 建议13:避免为final变量复杂赋值 建议14:使用序列化类的私有方法巧妙解决部分属性持久化问题 ...

  8. 转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

    阅读目录 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量 建议3:三元操作符的类型务必一致 建议4:避免带有变长参数的方法重载 建议5:别让null值和空值威胁到变长方法    ...

  9. intellij idea中快速抽取方法(代码优化)

    转载于:intellij idea中快速抽取方法_分享传递价值-CSDN博客_idea抽取方法 Intellij IDEA使用教程相关系列 目录 问题:有时候一个方法里面嵌套了很多逻辑,想拆分为多个方 ...

最新文章

  1. 太原科技大学计算机在哪个校区,太原科技大学有几个校区及校区地址 哪个校区最好...
  2. java 线程的函数_Java线程总结
  3. JSON和JSONP有什么区别?
  4. 剑指offer---包含min函数的栈
  5. Hadoop入门(Hadoop2.7.2源码编译与伪分布安装)
  6. H5页面适配所有iPhone和安卓机型的六个技巧
  7. 数据结构实验之栈八:栈的基本操作
  8. 网络爬虫数据挖掘_我如何构建无服务器网络爬虫以大规模挖掘温哥华房地产数据...
  9. 猜拳游戏php代码,最常见的猜拳小游戏Android代码实现
  10. Flutter与JS的双向调用、Flutter中Widget与Html混合加载
  11. C++ 复制一个文件夹下的所有文件到另一个文件夹
  12. python items和setdefault函数
  13. ios android c跨平台,Unity 使用C/C++ 跨平台终极解决方案(PC,iOS,Android,以及支持C/C++的平台)...
  14. iOS常用三方库、插件、知名技术博客、常用开发工具使用介绍等等(Objective-C版本)
  15. ftps协议怎么连接服务器,浅谈 FTP、FTPS 与 SFTP的区别
  16. 手机熊猫直播怎么投屏
  17. 一、无线通信中,工作频率与带宽的关系
  18. 打开计算机窗口的控制菜单,打开控制面板的几种方法
  19. 蓝桥杯省赛真题2016题解
  20. 常见的企业流程再造模式

热门文章

  1. 【原创】智能云计算机(云脑)软件开发招商
  2. 微服务:同步与异步的抉择。
  3. 线圈拉链行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  4. 北京理工大学-嵩天python语言程序设计-9-Python计算生态概览
  5. 云原生 - 负载均衡(SLB)多可用区
  6. xctf攻防世界 MISC高手进阶区 打野
  7. 安全快报 | 美国国土安全部负责人表示,海事部门缺乏网络安全
  8. LightOJ-1253 Misere Nim
  9. 干货 | 深度理解数据采集与埋点,提高自主数据分析能力!
  10. 《数值分析》李庆扬 03 曲线拟合的最小二乘法