PHP如何c 获取变量的名称自定义函数的变量名的变量名称

[QMacros] 教程: 使用 QMacros 从 PHP 脚本中获取使用的变量名称列表 - 推酷
[QMacros] 教程: 使用 QMacros 从 PHP 脚本中获取使用的变量名称列表
【注】本教程仅出于演示目的,并不代表作者推荐或者反对某种做法,也不代表这些代码有任何其它实际用途。
QMacros 的是一个高效的栈式查找替换引擎,为您提供丰富的功能。下面的代码演示了如何从一段 PHP+HTML 混合代码得到所有的 PHP 定义的变量名(其中源代码放到了Memo1 里,输出的变量名称直接放到了Memo2中):
Delphi/Pascal
TForm1 = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
{ Private declarations }
procedure DoCodeBlockFound(ASender: TQMacroM AName: QStringW;
const AQuoter: QCharW; var AHandled: Boolean);
procedure DoVarNameFound(ASender: TQMacroM AName: QStringW;
const AQuoter: QCharW; var AHandled: Boolean);
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
AMacros: TQMacroM
AResult: TQMacroC
AMacros := TQMacroManager.C
AList.Duplicates := dupI
AMacros.OnMacroMissed := DoCodeBlockF
//Complie is enough
AResult := plie(Memo1.Text, '&?php', '?&');
if Assigned(AResult) then //We don't use the result for replace,so free it.
FreeAndNil(AResult);
procedure TForm1.DoCodeBlockFound(ASender: TQMacroM AName: QStringW;
const AQuoter: QCharW; var AHandled: Boolean);
AVarParser: TQMacroM
AReplace: TQMacroC
AVarParser := TQMacroManager.C
AVarParser.OnMacroMissed := DoVarNameF
AReplace := plie(AName, '$', '', MRF_END_WITH_INVALID_CHAR);
if AReplace && nil then
ASender.Push(AName, '');
AHandled := T
FreeAndNil(AReplace);
FreeAndNil(AVarParser);
procedure TForm1.DoVarNameFound(ASender: TQMacroM AName: QStringW;
const AQuoter: QCharW; var AHandled: Boolean);
Memo2.Lines.Add(AName);
ASender.Push(AName, '');
AHandled := T
&&TForm1 = class(TForm)
&&&&Button1: TB
&&&&Memo1: TM
&&&&Memo2: TM
&&&&procedure Button1Click(Sender: TObject);
&&&&{ Private declarations }
&&&&procedure DoCodeBlockFound(ASender: TQMacroM AName: QStringW;
&&&&&&const AQuoter: QCharW; var AHandled: Boolean);
&&&&procedure DoVarNameFound(ASender: TQMacroM AName: QStringW;
&&&&&&const AQuoter: QCharW; var AHandled: Boolean);
&&&&{ Public declarations }
&&Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
&&AMacros: TQMacroM
&&AResult: TQMacroC
&&AMacros := TQMacroManager.C
&&&&AList.Duplicates := dupI
&&&&AMacros.OnMacroMissed := DoCodeBlockF
&&&&//Complie is enough
&&&&AResult := plie(Memo1.Text, '&?php', '?&');
&&&&if Assigned(AResult) then //We don't use the result for replace,so free it.
&&&&&&FreeAndNil(AResult);
&&&&AMacros.F
procedure TForm1.DoCodeBlockFound(ASender: TQMacroM AName: QStringW;
&&const AQuoter: QCharW; var AHandled: Boolean);
&&AVarParser: TQMacroM
&&AReplace: TQMacroC
&&AVarParser := TQMacroManager.C
&&&&AVarParser.OnMacroMissed := DoVarNameF
&&&&AReplace := plie(AName, '$', '', MRF_END_WITH_INVALID_CHAR);
&&&&if AReplace && nil then
&&&&&&ASender.Push(AName, '');
&&&&&&AHandled := T
&&&&&&FreeAndNil(AReplace);
&&&&FreeAndNil(AVarParser);
procedure TForm1.DoVarNameFound(ASender: TQMacroM AName: QStringW;
&&const AQuoter: QCharW; var AHandled: Boolean);
&&Memo2.Lines.Add(AName);
&&ASender.Push(AName, '');
&&AHandled := T
把界面贴出来给大家便于对照着看:
好了,我们在 Button1 的 OnClick 事件里响应函数 Button1Click 里做了这么点事:
创建了 TMacroManager 对象的实例 AMacros,然后设置其 OnMacroMissed 事件的响应函数,指向&DoCodeBlockFound 函数,用于找到以 &?php 开始,以 ?& 结束的代码块。DoCodeBlockFound 函数做了进一步的处理:
创建了一个 TQMacroManager 对象的实例,然后设置其 OnMacroMissed 事件的响应函数指向 DoVarNameFound。在 DoVarNameFound 里,我们将找到的变量名输出到Memo2中。
调用 AMacros 的 Complie 方法,解析源代码,找到 PHP 代码块,由于我们没有入栈任何代码块的宏定义,所以它会触发 OnMacroMissed 事件的响应函数 DoCodeBlockFound,从而引发进一步的处理,完成变量名称的输入任务。
注意一点,我们在 OnMacroMissed 事件的处理中,都入栈了 AName 命名的参数,并设置 AHandled 为 True,以避免 QMacros 后面的默认处理代码。
好了,代码的简单解读就到这里,实际上很一目了然。这里看一下效果:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致PHP大小写问题:函数名和类名不区分,变量名区分
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了PHP大小写问题,php中变量名是区分大小写的,而函数名与类名是不区分的
PHP对大小写敏感问题的处理比较乱,写代码时可能偶尔出问题,所以这里总结一下。但我不是鼓励大家去用这些规则。推荐大家始终坚持“大小写敏感”,遵循统一的代码规范。
1. 变量名区分大小写
代码如下:&&?php&$abc = 'abcd';&echo $ //输出 'abcd'&echo $aBc; //无输出&echo $ABC; //无输出
2. 常量名默认区分大小写,通常都写为大写(但没找到能改变这个默认的配置项,求解)
代码如下:&&?php&define("ABC","Hello World");&echo ABC; //输出 Hello World& //输出 abc
3. php.ini配置项指令区分大小写如 file_uploads = 1 不能写成 File_uploads = 1
4. 函数名、方法名、类名不区分大小写但推荐使用与定义时相同的名字
代码如下:&&?php&function show(){&echo "Hello World";&}
&show(); //输出 Hello World 推荐写法
&SHOW(); //输出 Hello World
代码如下:&&?php&class cls{&static function func(){&echo "hello world";&}&}&Cls::FunC(); //输出hello world
5. 魔术常量不区分大小写,推荐大写包括:__LINE__、__FILE__、__DIR__、__FUNCTION__、__CLASS__、__METHOD__、__NAMESPACE__。
代码如下:&&?php&echo __line__; //输出 2&echo __LINE__; //输出 3
6. NULL、TRUE、FALSE不区分大小写
代码如下:&&?php&$a =&$b = NULL;&$c =&$d = TRUE;&$e =&$f = FALSE;&var_dump($a == $b); //输出 boolean true&var_dump($c == $d); //输出 boolean true&var_dump($e == $f); //输出 boolean true
PHP变量名区分大小写,函数名不区分大小写,经常被新手忽视的小细节,测试如下.
PHP变量名区分大小写测试:
代码如下:&?php &&& $aaa = "jb51.net"; &&& $AAA = ""; &&& echo $aaa.'-'.$AAA;& //jb51. ?&
PHP函数名不区分大小写测试:
代码如下:&?php &&& function bbb(){ &&&&&&& echo 'abc'; &&& } &&& function BBB(){ &&&&&&& echo "Abc"; &&& } ?&
上面这段代码会报错:( ! ) Fatal error: Cannot redeclare BBB()
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具2016年10月 PHP大版内专家分月排行榜第二2016年9月 PHP大版内专家分月排行榜第二2016年7月 PHP大版内专家分月排行榜第二2016年6月 PHP大版内专家分月排行榜第二2016年3月 PHP大版内专家分月排行榜第二2016年2月 PHP大版内专家分月排行榜第二2016年1月 PHP大版内专家分月排行榜第二2015年11月 PHP大版内专家分月排行榜第二2015年10月 PHP大版内专家分月排行榜第二2015年8月 PHP大版内专家分月排行榜第二2015年7月 PHP大版内专家分月排行榜第二2015年6月 PHP大版内专家分月排行榜第二2015年4月 PHP大版内专家分月排行榜第二2015年3月 PHP大版内专家分月排行榜第二2015年2月 PHP大版内专家分月排行榜第二2015年1月 PHP大版内专家分月排行榜第二2014年12月 PHP大版内专家分月排行榜第二2014年11月 PHP大版内专家分月排行榜第二2014年10月 PHP大版内专家分月排行榜第二2014年9月 PHP大版内专家分月排行榜第二2014年8月 PHP大版内专家分月排行榜第二2014年7月 PHP大版内专家分月排行榜第二2014年6月 PHP大版内专家分月排行榜第二
2016年8月 PHP大版内专家分月排行榜第三2016年5月 PHP大版内专家分月排行榜第三2016年4月 PHP大版内专家分月排行榜第三2015年12月 PHP大版内专家分月排行榜第三2015年9月 PHP大版内专家分月排行榜第三2015年5月 PHP大版内专家分月排行榜第三2014年5月 PHP大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 c 获取变量名称 的文章

 

随机推荐