0

最近、私は Laravel を学び始めました。これは本当に優れた PHP フレームワークです。現在、Laravel の動作に似た独自の MVC を作成しようとしています。

私の論理

ルートを設定し、現在の URL が存在するかどうかを確認し、そこからコントローラとメソッドを から設定し'uses'、そうでない場合はコントローラを に設定しERRORます。問題は、$routes 変数にアクセスできないことです。

PHP を試してみるとエラーが表示されますが、PHP バージョンが5.2static::$routes = ..であっても Lavarel は正常に動作しています。全体の仕組みがわかりません。また、アーキテクチャを構築する方法について何か提案があれば:)

index.php

include 'router.php';
include 'route.php';


Route::get('about',array('uses'=> 'about@index'));
Route::get('about2',array('uses'=> 'about@index'));

ルーター.php

class Router {

    public static $routes = array(
        'GET'    => array(),
        'POST'   => array(),
        'PUT'    => array(),
        'DELETE' => array(),
        'PATCH'  => array(),
        'HEAD'   => array(),
    );

    public $valid = false;

    public static $methods = array('GET', 'POST', 'PUT', 'DELETE', 'HEAD');


    public static function register($method, $route, $action)
    {       

        if (ctype_digit($route)) $route = "({$route})";

        if (is_string($route)) $route = explode(', ', $route);

        foreach ((array) $route as $uri){
            if (is_array($action)){
                $routes[$method][$uri] = $action;
            }
        }

        $request = $_SERVER['REQUEST_URI'];
        $request = trim($request, '/');

        $exist = array_key_exists($request, $routes[$method]);

        if($exist){
            $valid = true;
        } 

        echo $valid;

        // print_r($routes);
    }

}

route.php

class Route {


    public static function get($route, $action)
    {
        Router::register('GET', $route, $action);
    }

}
4

2 に答える 2

3

作品をコピーして貼り付ける予定がある場合は、すべてが単純な静的であると想定する前に、まずプロセス全体を理解してください。以下を読んでください。

于 2012-08-06T23:14:38.833 に答える
1

これは、ローカル変数のみを使用しているためです。クラスを扱う場合、オブジェクト変数は$this->および 静的変数 (self::またはを使用) を介してアクセスされますstatic::

http://codepad.org/F7UWmOSb

class Foo
{
    protected static $bar = 'lorem';
    protected $buz = 'ipsum';

    public function test()
    {
        var_dump( $this->buz );
        var_dump( self::$bar );
    }

}


$instance = new Foo;
$instance->test();

また、@PeeHaaが述べたように、静的変数の使用をやめてください。OOP ではありません。class静的構造は、たまたま定義のように見える、名前空間にラップされた単なるグローバル変数/関数です。

依存性注入について学び、これらの講義が役立つかもしれません:

于 2012-07-28T14:58:07.250 に答える