PHPのメタ言語プログラミング
メタ言語のプログラミングは、最も柔軟な場所で使用されます.
最近の任務は、極めて柔軟な試験問題計算プロジェクトを設計することであり、この最大の困難は、いくつかの試験用紙の得点計算規則が異なることである.
一般的な方法では、6つのプログラムを直接書くことができますが、同じ部分がたくさんあります.設計が悪いと、コードの冗長性が多くなり、メンテナンスが困難になります.
そのため、メタ言語でプログラミングし、異なる論理をプロファイルに書き、統一的なルールを形成する方法を丹念に設計すれば、タスクを完了することができます.
閑話eval関数
PHPは柔軟なスクリプト言語であり、スクリプト言語である以上、一般的には対応するメタプログラミング方法を提供し、最も古いのはeval関数である.
Eval関数はlispで最初に実装され、広く受け入れられ、eval関数はパラメータとして文字列(もちろんlispではリスト)を受け入れ、この文字列の値をコードとして実行します.
Eval関数は実際に解析器内部関数を呼び出し,テキストを文法解析,文法解析,現在のシンボルテーブルを処理して実行する.
このphpコードは、eval関数の最良の例です.もちろん、ここではphpの重要な特性も使用されています.単一引用符で表されるのは純粋な文字列ですが、二重引用符で表される部分には、$の先頭の変数がフォーマットされ、二重引用符の下で改行されるだけで、出力されません.
次に、実行結果を示します.
php関数の特殊呼び出し
eval関数というと、phpには便利な内部関数があります.
本文は西風逍遥旅行のオリジナルに属して、転載して出典を明記してください:西風の世界http://blog.csdn.net/xfxyy_sxfancy
最近の任務は、極めて柔軟な試験問題計算プロジェクトを設計することであり、この最大の困難は、いくつかの試験用紙の得点計算規則が異なることである.
一般的な方法では、6つのプログラムを直接書くことができますが、同じ部分がたくさんあります.設計が悪いと、コードの冗長性が多くなり、メンテナンスが困難になります.
そのため、メタ言語でプログラミングし、異なる論理をプロファイルに書き、統一的なルールを形成する方法を丹念に設計すれば、タスクを完了することができます.
閑話eval関数
PHPは柔軟なスクリプト言語であり、スクリプト言語である以上、一般的には対応するメタプログラミング方法を提供し、最も古いのはeval関数である.
Eval関数はlispで最初に実装され、広く受け入れられ、eval関数はパラメータとして文字列(もちろんlispではリスト)を受け入れ、この文字列の値をコードとして実行します.
Eval関数は実際に解析器内部関数を呼び出し,テキストを文法解析,文法解析,現在のシンボルテーブルを処理して実行する.
$string = 'Bierglas';
$name = 'Binding-Lager';
$str = 'Das ist mein $string, voll mit $name.';
echo $str . "
";
eval ("\$str = \"$str\";");
echo $str . "
";
このphpコードは、eval関数の最良の例です.もちろん、ここではphpの重要な特性も使用されています.単一引用符で表されるのは純粋な文字列ですが、二重引用符で表される部分には、$の先頭の変数がフォーマットされ、二重引用符の下で改行されるだけで、出力されません.
次に、実行結果を示します.
$ 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
*/
function a($b, $c)
{
echo $b ."
";
echo $c ."
";
}
call_user_func_array('a', array("111", "222"));
本文は西風逍遥旅行のオリジナルに属して、転載して出典を明記してください:西風の世界http://blog.csdn.net/xfxyy_sxfancy