仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 825|回复: 18
打印 上一主题 下一主题

[学习教程] PHP教程之若何获得一个变量的名字

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:34:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
开发相册系统过程中就有过这样的问题,因为没有交流好,出现重复工作问题,因为文档没有详细的说明而经常临时问对方。     
  好比, 我供应一个查询办事, 用户可以提交一团体的名字和岁数做为查询前提.
  假定我要查询一个名字叫做”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:26 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
若天明 该用户已被删除
板凳
发表于 2015-2-8 04:13:28 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
只想知道 该用户已被删除
地板
发表于 2015-2-8 13:50:11 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
莫相离 该用户已被删除
5#
发表于 2015-2-9 21:13:46 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
活着的死人 该用户已被删除
6#
发表于 2015-2-9 22:19:45 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
7#
发表于 2015-2-28 00:35:19 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-2 22:52:35 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
乐观 该用户已被删除
9#
发表于 2015-3-11 07:18:30 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
小女巫 该用户已被删除
10#
发表于 2015-3-15 10:28:59 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
柔情似水 该用户已被删除
11#
发表于 2015-3-22 00:09:20 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
精灵巫婆 该用户已被删除
12#
发表于 2015-3-23 18:27:07 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
飘灵儿 该用户已被删除
13#
发表于 2015-4-6 19:08:58 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
飘飘悠悠 该用户已被删除
14#
发表于 2015-4-8 00:46:28 | 只看该作者
实践是检验自己会不会的真理。
金色的骷髅 该用户已被删除
15#
 楼主| 发表于 2015-4-12 15:55:42 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
蒙在股里 该用户已被删除
16#
发表于 2015-4-20 20:26:52 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
爱飞 该用户已被删除
17#
发表于 2015-4-26 05:09:12 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
兰色精灵 该用户已被删除
18#
发表于 2015-4-26 08:12:26 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
再现理想 该用户已被删除
19#
发表于 2015-6-8 07:34:32 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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