欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP的元语言编程

程序员文章站 2022-04-02 19:17:50
...
元语言编程,都是要用在最灵活的地方的。

最近的任务,设计一个极为灵活的试题计算项目,而这最大的困难就是,几套试卷的得分计算规则都不一样。

如果要按照一般的方法,可能就直接写六套程序完事,但这其中有大量相同的部分,如果设计不好,则会导致大量代码冗余,造成维护困难。

为此,要精心设计一个方法,利用元语言编程,将不同的逻辑写到配置文件中,形成一个统一的规则,就可以完成任务了。

闲话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教程有兴趣的朋友有所帮助。

PHP的元语言编程

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频