仓酷云

标题: PHP教程之若何获得一个变量的名字 [打印本页]

作者: 金色的骷髅    时间: 2015-2-3 23:34
标题: PHP教程之若何获得一个变量的名字
开发相册系统过程中就有过这样的问题,因为没有交流好,出现重复工作问题,因为文档没有详细的说明而经常临时问对方。     
  好比, 我供应一个查询办事, 用户可以提交一团体的名字和岁数做为查询前提.
  假定我要查询一个名字叫做”laruence”, 岁数是27的人, 我以为这团体的界说的查询token可以写做:
  laruence=27
不幸的是, 当如许的一个token做为query string提交给办事器的处置剧本的时分, 你就会发明, 诶,,我不晓得用户名是甚么,,,
  好吧, 因而, 你就只好这么写:
  username=laruence&age=27
那末, 可否获得到一个变量的名字呢?
  起首, 从能够性上剖析,
  咱们晓得, 在C言语中, 一切的符号在编译器都被”交换”失落了.
  而在PHP中, 一切的变量都存储在称为”符号表”的HastTable布局中. 在解析履行的过程当中, 照旧保存着着”符号”信息, 所以, 一定是可以获得到的.
  而在PHP中, 符号的感化域是和举动符号表相干联的. 统一工夫, 只要一个举动符号表.
  那末怎样了解举动符号表和符号表呢?
  关于PHP来讲, 以后举动的符号表是保留在全局变量EG(active_symbol_table)中的, 而于此同时, 还有个全局符号表保留在EG(symbol_table)中, 在进入一个函数挪用的履行体之前, 会生成一个新的active_symbol_table, 而且会坚持一个挪用栈式样的符号表栈:EG(symtable_cache), 以便在加入函数挪用的时分, 恢复之前的举动符号表(感化域).
  同时在PHP中, 不克不及完成感化域承继, 也就是不克不及直接会见感化域外层的符号(需求加上golbal声明), 而假如加上global的声明的话, 也会在以后的举动感化域生成一个copy, 也就是说, 不存在在以后感化域可见的符号是保留在全局符号表的.
  如上剖析, 咱们只需求在以后的举动符号表中, 就能够找到咱们需求的变量的称号,
  固然, 有了这些还不敷, 咱们若何在PHP的剧本中完成获得以后的符号表呢?
  get_defined_vars

但是有一个成绩要注重, 就是get_defined_vars前往的是以后举动符号表中界说的变量名, 也就是说, 假如你需求包装一个函数, 相似于:
  get_variable_name($var)
而且测验考试在这个函数中经由过程get_defined_vars来获得在挪用get_variable_name时辰的符号表是行欠亨的.
  所以, 咱们获得变量名字的函数, 应当是上面的这个模样:
  get_variable_name($var, $scope)
如今, 已失掉了以后举动的符号表, 接上去, 若何失掉变量的名字呢?
  明显, 咱们需求依据变量的值去查询这个表, 找到值等于要找值的变量, 然而, 如许做又有一个成绩, 那就是, 能够会有多个变量的值相等啊?
  所以, 咱们需求给这个变量一个独一值. 而如果想要这个变量, 那末, 咱们的这个目标函数的模式又要变一下了:
  get_variable_name(&$var, $scope)
接上去完美这个函数体吧:
  function get_variable_name(&$var, $scope = NULL) {
if (NULL == $scope) {
$scope = $GLOBALS;
}

$tmp = $var;

$var = "tmp_exists_" . mt_rand();

$name = array_search($var, $scope, TRUE);

$var = $tmp;

return $name;
}
别的, 有一个成绩就是, 假如有多个变量之间有援用, 那末这个函数只是前往最早界说的变量名..
  别的, 你也能够参考: http://php.net/manual/en/language.variables.php
用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。
作者: 深爱那片海    时间: 2015-2-4 02:22
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者: 若天明    时间: 2015-2-8 04:13
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 只想知道    时间: 2015-2-8 13:50
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 莫相离    时间: 2015-2-9 21:13
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 活着的死人    时间: 2015-2-9 22:19
兴趣是最好的老师,百度是最好的词典。
作者: 仓酷云    时间: 2015-2-28 00:35
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者: 愤怒的大鸟    时间: 2015-3-2 22:52
本文当是我的笔记啦,遇到的问题随时填充
作者: 乐观    时间: 2015-3-11 07:18
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者: 小女巫    时间: 2015-3-15 10:28
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
作者: 柔情似水    时间: 2015-3-22 00:09
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者: 精灵巫婆    时间: 2015-3-23 18:27
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 飘灵儿    时间: 2015-4-6 19:08
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 飘飘悠悠    时间: 2015-4-8 00:46
实践是检验自己会不会的真理。
作者: 金色的骷髅    时间: 2015-4-12 15:55
Ps:以上纯属原创,如有雷同,纯属巧合
作者: 蒙在股里    时间: 2015-4-20 20:26
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 爱飞    时间: 2015-4-26 05:09
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 兰色精灵    时间: 2015-4-26 08:12
兴趣是最好的老师,百度是最好的词典。
作者: 再现理想    时间: 2015-6-8 07:34
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2