执行如下代码:

$i = 10;
function my(){
echo $i;
}
my();

xdebug显示是:Undefined variable

以前也知道有这个问题存在,即函数内部不可以访问外部的变量,如果想访问,如上,则在函数内部加 global $i(或者写成:$GLOBALS['i'])。

今天看到http://phpbook.sinaapp.com/ch2.4.html,才知道原来是这么回事:

用户在php中定义的变量都可以在一个HashTable中找到,当php中定义一个变量,内核会自动的把它的信息存储到一个用HashTable实现的符号表里。

当用户在php中调用一个函数或者类的方法时,内核会创建一个新的符号表并激活之,这也是为什么我们无法在函数中使用函数外定义的变量的原因(因为他们分属两个符号表,一个当前作用域,一个全局作用域的),如果不是在一个函数里,则全局作用域的符号表处于激活状态。

最新文章

  1. SRS文档 王倩倩 201303014004
  2. 第十章:Javascript子集和扩展
  3. ActionBar右边菜单按钮的添加
  4. 28335 AD 转换
  5. 为Asp.Net Web Api添加Http基本认证
  6. Appium自动化测试环境的搭建及脚本执行
  7. mysql查询随机几条数据(速度快)
  8. 使用 Nginx 来反向代理多个 NoderCMS
  9. Cmake编译成静态库
  10. Oracle EBS-SQL (PO-17):检查供货比例不为100%.sql
  11. int指令(软件中断指令)
  12. (转) 通过input分片的大小来设置map的个数
  13. vue2.0引入腾讯地图
  14. DotNetCore跨平台~Quartz定时单次任务
  15. 前端测试框架Jest系列教程 -- Asynchronous(测试异步代码)
  16. 第四章:4.2MySQL 权限系统介绍
  17. Gitlab源码库里代码提交后,如何触发jenkins自动构建?
  18. [CF1093E]Intersection of Permutations
  19. Django--CRM--菜单排序等
  20. f5 主备模式切换

热门文章

  1. ServletContext接口(六)
  2. JSPatch在MAC下的使用
  3. 跨平台技术iOS与安卓
  4. Flask 新闻网站
  5. Apache 性能调优-参考篇
  6. std::ostream_iterator用法
  7. Reincarnation HDU - 4622
  8. P3345 [ZJOI2015]幻想乡战略游戏 动态点分治
  9. mybatis组合实体查询
  10. spring boot 下websocket实现的两种方法