PHP フレームワークを自分で書く方法
[size=small][color=darkred] PHP フォーラムでは、PHP の OOP サポートについて、欠陥や欠陥があるが、実際的な例は何も提供できないという無責任な発言をする人々をいつも聞きます。もともとこのことについてお話したいと申し上げていたのですが、大変忙しくて時間が取れてしまったので、先ほど取り組んだプロジェクトのフレームワークを取り出してお話しさせていただきます。このプロジェクトのコードの 99% は OOP で書かれており、PHP は OOP を非常によくサポートしていると感じます。プロジェクト自体は商用プロジェクトなのでソースコードを公開するのは難しいですが、それでも基本的な枠組みは説明できますし、簡略化したサンプルの方が理解しやすいです。 PHP の OOP についてあまり詳しくない場合は、ここでやめて、最初にマニュアルまたは基本的な資料を読むことをお勧めします。とにかく、これは脚がなければ実行できない記事です。
簡単に言うと、今すぐ始めましょう。ここでは、関数が 1 つ半しかない簡単な例を使用します。 1 つは「こんにちは、PHP の世界では OOP と言えます!」という文をブラウザに送信することです。もう 1 つの機能はデータベースからクエリを実行してブラウザに出力するためです。これは例としてのみ使用されており、実際のデータベース操作は含まれません。
最初のファイル、index.php から始めましょう。私のindex.phpファイルは次のようになります:
<?php include_once ('config.php'); include_once ('class.Application.php'); $app = & new Application(); $app->run(); ?>
<?php class Application { function Application() { } function run() { } } ?>
<?php class Page { function Page() { } function show() { //不能直接调用这个方法一定要在子类中去具体实现。 die('You can not use this funciton directly from Page class'); } } ?>
<?php require_once ("class.Page.php"); class HelloPage extends Page { function HelloPage() { parent::Page(); } function show() { echo "Hello, I can say OOP in PHP world!"; } } ?>;
<?php require_once ("class.Page.php"); class DatabasePage extends Page { function DatabasePage() { parent::Page(); } function show() { //做一些数据库操作然后将结果显示出来。 } } ?>;
<?php class Application { function Application() { } function getAction() { } function run() { $pageClass = $this->;getAction(); include_once ("class.".$pageClass.".php"); $page = & new $pageClass(); $page->;show(); } } ?>
<?php require_once ("class.Database.php"); class Application { var $db;//数据库对象 function Application() { $this->;db = & new Database(DB_HOST,DB_NAME,DB_LOGIN,DB_PASS);//$db 现在是一个数据库对象了 } function getAction() { return $_GET['action']; //简单的实现 getAction; } funciton & getDatabase() { return $this->;db; } function run() { $pageClass = $this->;getAction(); include_once ("class.".$pageClass.".php"); $page = & new $pageClass($this); //这里是唯一做了手脚的地方,将这个Application对象传给页面对象。 $page->;show(); } } ?>
<?php require_once ("class.Page.php"); class DatabasePage extends Page { var $db; function DatabasePage(&$app)//将Application对象作为参数接受。 { parent::Page(); $this->;db = $app->;getDatabase();//获得 Application 中的数据库对象。 } function show() { $sql = 'SELECT * FROM sale_orders';//简单的一个 SQL 例子。 $results = $this->;db->;query($sql);//query 是 Database对象的一个公共的方法,通过它向数据库提交SQL查询。 ...;//做一些操作把得到的结果显示出来。 } } ?>