すべて、コール()
私は、軽量PHPダイナミックフロントコントローラで次の記事読んでいます:ここでhttp://www.w3style.co.uk/a-lightweight-and-flexible-front-controller-for-php-5
はコードです:
のindex.php
<?php
define("PAGE_DIR", dirname(__FILE__) . "/pages");
require_once "FrontController.php";
FrontController::createInstance()->dispatch();
FrontController.php
<?php
class FrontController {
public static function createInstance() {
if (!defined("PAGE_DIR")) {
exit("Critical error: Cannot proceed without PAGE_DIR.");
}
$instance = new self();
return $instance;
}
public function dispatch() {
$page = !empty($_GET["page"]) ? $_GET["page"] : "home";
$action = !empty($_GET["action"]) ? $_GET["action"] : "index";
//e.g. HomeActions
$class = ucfirst($page) . "Actions";
//e.g. pages/home/HomeActions.php
$file = PAGE_DIR . "/" . $page . "/" . $class . ".php";
if (!is_file($file)) {
exit("Page not found");
}
require_once $file;
$actionMethod = "do" . ucfirst($action);
$controller = new $class(); // I DON'T UNDERSTAND WHAT THIS DOES...
if (!method_exists($controller, $actionMethod)) {
exit("Page not found");
}
//e.g. $controller->doIndex();
$controller->$actionMethod();
exit(0);
}
}
ページ/ゲストブック/ GuestbookActions.phpフロントコントローラクラスで
<?php
class GuestbookActions {
public function doIndex() {
echo "Index action called...";
}
public function doCreatePost() {
echo "CreatePost action called...";
}
}
、誰かが$controller = new $class();
が何を私に説明できますか?私はそれを理解していない。それは、オンザフライでクラスを作成しているようですか?上記の例では、$class
は、"HomeActions"
のような値を持つ文字列です。だから$controller
は"HomeActions"
というクラスの新しいインスタンスになりますが、それらはどこにも定義されていません。よくわかりません。
多くのおかげで、
JDelage
皆さんありがとうございます - ありがとう! – JDelage