正在爲PHP編寫一小組框架結構(不要與MVC樣式框架混淆),我想驗證我的方法,因爲它看起來很「笨拙」:面向PHP的「框架」OOP工作流程
所有請求都通過重定向指令(apache htaccess)傳遞給引導程序。
引導程序需要所有必需的文件。
然後根據路由調用用戶類(這很好,這裏不包括)
每個用戶模塊擴展核心模塊,然後實例化支持類,如DB和CACHE,從而繼承實例,我不必關心打開/管理連接,或者如果我在這些類中實例化其他類 - 我不必將我的數據庫/緩存作爲參數傳遞。另外,如果我在相同的請求中有大量用戶類方法調用的大量請求 - 我認爲它只會使用core.module的一個實例 - 這應該是件好事。對?對?
但是,配置傳遞似乎是iffy:我恨激情的GLOBALS - 但我不能做一個靜態配置類,因爲我不能把數組(無PHP中的靜態數組)。此外,這打破了所有的IDE intellisenses和開發者都在我:(
是否整個方法意義瘋了嗎?我應該去RTM更多?
謝謝您的誠實的意見,僞碼附後。
//my_config_prod.php
<?php
$CONFIG = array('db' => array(..multi-level array here..), 'cache' => array(...));
?>
//bootstraper.php
<?php
require '../config/my_config_prod.php';
require '../core/core.mysql.php';
require '../core/core.cache.php';
require '../core/core.module.php';
require '../class/class.user.php';
//initialize things:
$GLOBALS['DB'] = new CoreMysql($CONFIG['db']);
$GLOBALS['CACHE'] = new CoreCache($CONFIG['cache']);
//run, this is simplified - route handler is installed here that will
//call appropriate module based on the incoming request
$user = new User();
$info = $user->load_user(1);
?>
//core.module.php
<?php
public function __construct() {
global $CACHE;
$this->cache = $CACHE;
global $DB;
$this->db = $DB;
}
?>
//class.user.php
<?php
class User extends CoreModule{
public function __construct() {
parent::__construct();
}
public function load_user($id) {
return $this->db->get_user($id)
}
}
?>
它使用全局變量,所以我想你應該刪除OOP標記。 – Gordon
什麼是__constructor()? –
對不起,用正確的語法更新。它只是構造調用父類的構造函數的用戶類。 –