Динамическая реализация методов с именами в PHP

0

Есть несколько маршрутизаторов, но я решил создать очень простой маршрут для очень легкого сайта.

Вот мой 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(); не работает. возвращает ошибку 'не может найти Home' new Home(); фактически работает.

Что мне здесь не хватает?

  • 1
    попробуйте сделать $useMethod равным Laws\Controller\Home . Так что в основном $useMethod = 'Laws\\Controller\\' . $this->_method[$key];
  • 0
    @Jacob Как видно из его кода, он использует use
Показать ещё 1 комментарий
Теги:
namespaces

1 ответ

0

Вы можете использовать свой параллельный способ для вызова класса, или вы можете использовать это:

call_user_func(array($classname,$methodname))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню