PHP的元语言编程

元语言编程,都是要用在最灵活的地方的。

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

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

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

闲话eval函数

PHP是一门灵活的脚本语言,既然是脚本语言,那么一般都会提供相应的元编程方法,最古老的便是eval函数。

Eval函数最早在lisp中的实现,被人们广为接受,eval函数接受一个字符串作为参数(当然在lisp中是列表),然后将这段字符串中的值作为代码执行。

Eval函数实际上是调用了解析器内部函数,通过对文本进行词法分析,语法分析,处理当前符号表,然后进行执行。

<?php

$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,传递的参数可以是一个数组,这样就避免了不定参数的传递问题。


<?php
/**
 * @Author: sxf
 * @Date:   2015-07-29 23:00:36
 * @Last Modified by:   sxf
 * @Last Modified time: 2015-07-29 23:36:16
 */

    function a($b, $c)
    {
        echo $b ."\n";
        echo $c ."\n";
    }

    call_user_func_array('a', array("111", "222")); 

本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 http://blog.csdn.net/xfxyy_sxfancy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值