设为首页 收藏本站
查看: 706|回复: 0

[经验分享] php中的引用传值分析

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-26 14:04:56 | 显示全部楼层 |阅读模式
  首先说变量的名称空间, 名称空间有全局名称空间, 局部名称空间(函数内部/方法内部), 所谓名称空间, 就是存放名字的地方, 就是一个符号表, 你可以想象, 有很多数组, 专门用来存放自己作用域中的名字.
  每个名称空间是相互隔离的, 它们各自维护一个符号表用来保存自己作用域中的名称(变量名)
  变量是由名字和值组成的. 上面的名称空间中保存了变量的名字, 变量的值有两种类型, 一种是直接的值, 另外一种是对其他变量的引用.
  按照楼主的意思, 应该是明白引用的含义的, 不再赘述.
  php中引用的用法:
  1. 变量的引用赋值: $a = &$b
  2. 函数调用时的引用参数传递
  1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);
  2) 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);
  注: 引用声明时定义引用类型参数后, 运行时引用参数传递被废弃, 需要在php.ini中增加allow_call_time_pass_reference来开启.
  3. 函数返回引用类型, 这种应用方式需要声明函数时, 在函数名前增加&符号, 并且, 在调用时, 要用引用赋值方式, 比如:
  function &func() {return $a;}$a = func();  //这种调用方式得到的不是引用传值$a =& func(); //这样调用才是引用传值
  简而言之, 就是让函数的返回一个引用类型的值, 一个更实际的例子:
  $a = 1;function &func(&$a) {return $a;}$b = func($a);$c =& func($a);$b = 2;echo "a: $a, b: $b, c: $c. <br />/n";//输出a: 1, b: 2, c: 1.//可见对$b的修改不会影响$a$c = 3;echo "a: $a, b: $b, c: $c. <br />/n";//输出a: 3, b: 2, c: 3.//可见对$c的修改会影响$a
  4. global和static两个关键字
  1) global用来声明函数内部要使用一个全局变量, 其实这里隐式的创建了一个引用, 比如, global $a;就是在本地名称空间中创建一个名字a, 让它指向全局空间中$a变量的值.
  2) static关键字也是隐式创建了一个引用, 这里谈的static是指在函数内部声明静态变量的用法, 比如
  function func() {static $a = 1;echo $a ++ . ", ";}while($a ++ < 10) func();//输出结果: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
  这种用法会在一次请求(就是php一次完整的解释执行)过程中, 该变量只会被初始化一次, 每次函数调用结束后, 函数内的静态变量不会被销毁(而其他的局部变量会被销毁), 下一次函数调用时, 又重复利用上一次处理后的结果.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-355709-1-1.html 上篇帖子: php的对象clone使用 下篇帖子: php提取HTML中字符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表