누군가 내 서버에 닿을 때마다 실행되는 기본 PHP 파일이 있습니다.인스턴스화 된 클래스가 생성자의 클래스 include에 액세스하도록 허용
<?php
$config = require_once('./config/general.php');
define('ROOT', __DIR__.'/');
include(constant('ROOT').'libraries/log4php/Logger.php');
Logger::configure(constant('ROOT').'config/logging.xml');
$log = Logger::getLogger('main');
$requested_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$route_url = str_replace($config['baseURL'], '', $requested_link);
$route_url = $route_url == '' ? '/' : $route_url;
define('ROUTE', $route_url);
require_once 'routeme.php';
routeme.php
가 요청 된 URL을 처리하는 가장 좋은 "라우팅"클래스를 발견 : 그것은 다음과 같이 보입니다. 그 클래스를 인스턴스화 한 다음 요청 정보를 처리하기 위해 만든 라우터 클래스의 인스턴스로 요청 정보를 전달합니다.
모든 라우터는 기본 클래스를 확장 :
<?php
namespace Blaze;
class Router {
private $log;
public function __construct() {
// The __CLASS__ constant holds the class name
$this->log = Logger::getLogger(__CLASS__);
}
public function routes(){
return array();
}
}
예 라우터 : 나는 응용 프로그램을 실행하려고 할 때 Router
클래스가 포함되어 보지 않기 때문에
<?php
namespace Blaze;
class GeneralRouter extends Router {
public function RootRoute ($url){
$log->info($url);
}
public function routes(){
return array(
'/' => 'RootRoute'
);
}
}
, 그것은 실패 Logger
class from log4php (메인 파일의 로그 문은 물론 정상적으로 실행됩니다.) log4php는 응용 프로그램에 자기 자신을 한 번만 포함시킬 수 있기 때문에 라우터 당 클래스에 Logger 클래스를 다시 포함 할 수 없습니다 (아마도 파일 잠금 충돌을 방지하기 위해). 라우터가 Logger 클래스에 액세스하거나 보이게하려면 어떻게해야합니까?
해결책은 확장 가능해야합니다. 예를 들어 Logger 클래스에도 액세스해야하는 Router
클래스와 같은 나중에 더 많은 클래스를 갖게됩니다. 당신의 Router
클래스에서
감사합니다! 이것은 내가 거의 3 년 동안 PHP로 프로그래밍하지 못하는 것입니다. –
@KeithM You welcome :) –