php中命名空间方法的动态实例化

时间:2015-02-18 19:44:01

标签: php namespaces

那里有很少的路由器,但我决定为一个非常轻的站点创建一个非常简单的路由。

这是我的index.php

    $route = new Route();

    $route->add('/', 'Home');
    $route->add('/about', 'About');
    $route->add('/contact', 'Contact');

这是我的路由器:

<?php namespace Laws\Route;

use Laws\Controller\Home;

class Route
{
    private $_uri = array();
    private $_method = array();
    private $_route;

    public function __construct()
    {

    }

    public function add($uri, $method = null)
    {
        $this->_uri[] = '/' . trim($uri, '/');
        if ($method != null) {
            $this->_method[] = $method;
        }
    }

    public function submit()
    {
        $uriGetParam = isset($_GET['uri']) ? '/' . $_GET['uri'] : '/';

        foreach ($this->_uri as $key => $value) {
            if (preg_match("#^$value$#", $uriGetParam)) {
                $useMethod = $this->_method[$key];
                new $useMethod();     // this returns an error (cannot find Home'
                new Home(); // this actually works.
            }
        }
    }
}
  

new $ useMethod();不起作用。返回错误&#39;找不到Home&#39;   新家();实际上是有效的。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您可以使用并发方式来调用类,也可以使用它:

call_user_func(array($classname,$methodname))