PHP的元語言編程

來源:互聯網
上載者:User

標籤: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

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

PHP的元語言編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.