#php オンライン試験トレーニング システムの開発
注: この記事は、学習と開発のアイデアと手順を記録することを目的としています。商業的価値はありません。開発のアイデアを理解してください。商用利用するには 2 回目のアップグレードが必要です。 (推奨される学習:php トレーニング )
レンダリングは次のとおりです:1. この小規模プロジェクトではデータベースを使用しないため、テスト問題は配列形式で PHP ファイルに保存されます。コードの一部は次のとおりです:
注: 以下のコードは非常に混乱しています。 。記事の最後にあるプログラムのソース コードをダウンロードして、このブログ投稿と照らし合わせて表示できます。
<?php // 考试题库二 return [ // 题库标题 'title' => 'PHP基础语法考试题(二)', // 答题时限(秒数) 'timeout' => 1200, // 题库 'data' => [ // 判断题 'binary' => [ 'name' => '判断题', // 题型名称 'score' => 24, // 题型分数 'data' => [ 1 => [ 'question' => '在".php"后缀的文件中,所有的PHP代码都只能写在"<?php ?>"标记内。', 'answer' => 'no' ], 2=> [ 'question' => '标量类型包括布尔型、整型、字符串型和数组型。', 'answer' => 'no' ], 3=> [ 'question' => 'var_dump是PHP中用于打印变量或表达式的类型与值等相关信息的函数。', 'answer' => 'yes' ] ] ], // 单选题 'single' => [ 'name' => '单选题', 'score' => 40 , 'data' => [ 1 => [ 'question' => '下列选项中,不区分大小写的标识符是( )。', 'option' => [ '函数名','常量名','变量名','属性名' ], 'answer' => 'A' ], 2=> [
2. では、テスト問題データを取得するにはどうすればよいでしょうか?ファイルをインポートするだけです
$data=require "./data/1.php";上記のテスト問題ファイルは return によって返される配列であることに注意してください。ファイルをインポートするとき、テスト問題の配列データを $data 変数に直接割り当てます。をクリックし、$dataを操作して問題バンクのデータを表示します。
3. 可変質問バンク ファイル。
すべての問題バンク ファイルは /data/ ディレクトリに配置されます。各テスト項目は .php ファイルに対応します。テスト データの量、つまり .php ファイルの数を知りたい場合は、 php ファイルがありますが、ここでは glob() 関数が使用されており、コードは次のとおりです://统计题库目录下的“.php”文件个数,此处要求题库文件名必须是连续的数字$count = count(glob('./data/*.php'));glob() 関数はファイル リストの配列を返します。関数ダンプは次のとおりです。
array(3) { [0]=> string(12) "./data/1.php" [1]=> string(12) "./data/2.php" [2]=> string(12) "./data/3.php"}Because データを格納するファイル名はすべて連番になっているため、ループを通じてテスト問題情報を読み取ることが容易になります。
4. 匿名関数の使用。
匿名関数は、関数名のない関数であり、クロージャ関数とも呼ばれます。関数パラメータの値を破棄するためによく使用されます。一時的に定義された関数の場合、匿名関数の使用を考慮する必要はありません。関数名の競合に関する質問です。ここでの匿名関数の使用は、純粋に練習目的です。次のコードを関数関数にカプセル化することもできます:$func = function ($data) use(&$func){ $result = []; foreach ($data as $k=>$v){ //如果是数组,则继续递归,如果是字符串,则转义 $result[$k] = is_array($v) ? $func($v) : (is_string($v) ? toHtml($v) : $v); } return $result;};匿名関数を使用して、テスト問題データ内の特殊文字を再帰的にエスケープします。
5. HTML 特殊文字をエスケープします。
試験問題中にHTMLタグが出現した場合、ブラウザで解析されてそのまま出力できないため、問題中に存在する可能性のあるHTMLタグを文字エスケープする必要があります。//HTML特殊字符转义function toHtml($str){ $str=htmlspecialchars($str,ENT_QUOTES); return str_replace(' ',' ',$str);}ここでは、出力時に必要な形式で出力できるように、関数 htmlspecialchars() を使用して特殊文字の可能性をエスケープします。 対応する htmlspecialchars() 関数では、スペースと改行をエスケープできません。スペースをエスケープするには、str_replace() 関数を使用してそれらを直接置換する必要があります。改行の場合は、nl2br 関数を使用できます。
6. return は 2 つの値形式を返します。
具体的なコードは次のとおりです:function getDataInfo($data){ $count = []; //保存某种题型的题目数量 $score = []; //每道题的分值 foreach ($data as $k=>$v) { $count[$k]=count($v['data']); $score[$k]=round($v['score']/$count[$k]); } return [$count,$score]; //使用list()接收返回值:list($count,$score);顺序依次对应}コードは最後に return を使用して 2 つの結果変数を返します。これら 2 つの戻り値を受け取るには、 list( を使用する必要があります。 ) 1 つの配列割り当てを受け取ると、配列内の要素が順番に変数に割り当てられます。
7. 簡単に呼び出せるように、使用する関数を関数関数にカプセル化し、コードの重複を避けます。
ここでは、使用するすべての関数を可能な限り関数にカプセル化し、使用する場合は関数ファイルを導入するだけで管理が容易になり、コードの利用率が向上します。8. テンプレートを使用する
PHP を使用してデータを処理した後、//引入HTML模板require './view/index.html';を使用して PHP ファイルに HTML テンプレートを導入します。テンプレート、PHP タグを挿入して目的のデータを出力し、データを動的に表示することもできます。
在线考试系统请选择题库$v): ?> 时间:分钟 总分:分开始考试変数を直接出力: =$value?>変数セットを出力するループ: $ v) : ?>~~~~~~~
9. 三項演算子の使用に注意してください。 :?
当做一些简单的判断输出时,使用三元运算符: ?可以大大的提升效率,简化代码。
<!-- 答题情况 --><td><?=$v ? '对' : '错'?></td><!-- 得分 --><td><?=$v ? $score[$type] : 0?></td>
上述代码中,$v是一个bool值,通过三元运算符我们可以省略一大堆if判断,使代码看上去更加整洁。
10、页面中的计时倒计时、关闭页面提示、未做考题提交提示、考试时间结束自动交卷功能是通过jQuery、javascript来实现的,这里不作说明。
程序源码下载地址:
http://www.seoalphas.com/data/upload/ueditor/20170629/595494a1f01ea.rar
注:php中文网提供大量免费、原创、高清的php视频教程,并且会定期举行php公益培训!
以上がPHP開発オンライン試験トレーニングシステムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。