2016-06-01 3 views
0

Попытка использовать $url = Router::url(...); в соответствии с книгой (http://book.cakephp.org/3.0/en/development/routing.html#generating-urls), и я могу заставить ее работать, добавив use Cake\Routing\Router; к моему контроллеру, но у меня есть ощущение, что должно быть проще/лучше Кстати, я вспоминаю, что кто-то упоминал, что никогда не вызывал функцию Class::function().Правильное использование классов в CakePHP 3.x

Через дальнейшие исследования (никогда не прекращайте смотреть) кажется, что это всего лишь вещь класса.

  1. нагрузки класса с use Cake\Routing\Router;
  2. экземпляр класса с $routes = new Router();
  3. вызвать функцию $url = $routes->url(...);

Чтобы использовать статический Используйте экземпляр класса (?) Функция класса является его действительно лучше создать экземпляр класса или просто использовать Router :: url()?

+2

Вы довольно поздно, время, чтобы изучить пространства имен. http://php.net/manual/en/language.namespaces.php Это не имеет ничего общего с CakePHP, это просто пространства имен в php. Пространства имен * очень * распространены в течение некоторого времени. Привыкайте к ним. – burzum

+0

Спасибо за подсказку, но это выглядит как нечто более простое. – Naidim

ответ

2

Чтобы использовать статическую (?) Функцию класса, действительно лучше создать экземпляр класса или просто использовать Router :: url()?

url() является общедоступным статическим методом класса Router. Правильный способ вызова этого в PHP - Router :: url (...) (с использованием оператора разрешения области видимости: :).

Я помню, как кто-то упоминал, что никогда не вызывает функцию класса :: function().

Если вы можете найти его, мне было бы интересно услышать его рассуждения.

Если он или она имел в виду, что оператор разрешения области не является лучшим способом доступа к статическому методу, он или она ошибается. Что касается человека PHP, то оператор разрешения области - это правильный способ доступа к публичному статическому методу извне контекста класса: Scope Resolution Operator.

+0

Если это работает и сохраняет код, и нет больших «gotchas», я счастлив. Благодарю. – Naidim

+0

@CbNrZvWd, очень правдивые и веские причины, чтобы избежать * написания * статических методов. Тем не менее, OP хотел уточнить, что * вызывает * статический метод. – clarkatron

Смежные вопросы