PHP的元语言编程
最近的任务,设计一个极为灵活的试题计算项目,而这最大的困难就是,几套试卷的得分计算规则都不一样。
如果要按照一般的方法,可能就直接写六套程序完事,但这其中有大量相同的部分,如果设计不好,则会导致大量代码冗余,造成维护困难。
为此,要精心设计一个方法,利用元语言编程,将不同的逻辑写到配置文件中,形成一个统一的规则,就可以完成任务了。
闲话eval函数
PHP是一门灵活的脚本语言,既然是脚本语言,那么一般都会提供相应的元编程方法,最古老的便是eval函数。
Eval函数最早在lisp中的实现,被人们广为接受,eval函数接受一个字符串作为参数(当然在lisp中是列表),然后将这段字符串中的值作为代码执行。
Eval函数实际上是调用了解析器内部函数,通过对文本进行词法分析,语法分析,处理当前符号表,然后进行执行。
$string = 'Bierglas';
$name = 'Binding-Lager';
$str = 'Das ist mein $string, voll mit $name.';
echo$str . "\n";
eval ("\$str = \"$str\";");
echo$str . "\n";
这段php代码,就是eval函数的一个最好例子,当然,这里还用到了php中的一个重要特性,单引号引起来的,是纯的字符串,而双引号引起来的部分,则包含了大量的转义信息,例如:$开头的变量会被格式化进去,而\n也只有在双引号下才是换行,否则仅仅输出\n。
下面是执行结果:
$ php test.php
Das ist mein $string, voll mit $name.
Das ist mein Bierglas, voll mit Binding-Lager.
php函数的特殊调用
说完eval函数,其实php还有一些便利的内部函数可以使用。
call_user_func
,可以根据字符串中的名字调用一个php函数 call_user_func_array
,传递的参数可以是一个数组,这样就避免了不定参数的传递问题。
/**
* @Author: sxf
* @Date: 2015-07-29 23:00:36
* @Last Modified by: sxf
* @Last Modified time: 2015-07-29 23:36:16
*/functiona($b, $c)
{echo$b ."\n";
echo$c ."\n";
}
call_user_func_array('a', array("111", "222"));
本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 http://blog.csdn.net/xfxyy_sxfancy
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了PHP的元语言编程,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
上一篇: Python使用scrapy采集时伪装成HTTP/1.1的方法
下一篇: 什么是sql注入漏洞