Как использовать метод статического класса в качестве фильтра для библиотеки проверки Коханы? - PullRequest
0 голосов
/ 18 января 2010

В библиотеке Validation от Kohana есть метод pre_filter (), который позволяет применять любую функцию PHP к проверяемым полям, как trim () и т. Д.
Я пытался использовать статический метод в качестве фильтра, но он не работает:
$validation->pre_filter( 'field_name', 'class::method' )

Создается два фильтра: один с class и другой с method.

Есть какие-нибудь подсказки?

Ответы [ 2 ]

2 голосов
/ 18 января 2010

Обратный вызов - это один из псевдотипов PHP . Это позволит вам пройти

  1. функция
  2. метод экземпляра объекта
  3. статический метод / метод класса

к функции / методу PHP, ожидающему обратного вызова, и функция / метод PHP будет знать, что с ней делать.

Из руководства

Функция PHP передается по имени в виде строки. Можно использовать любую встроенную или пользовательскую функцию, кроме таких языковых конструкций, как: array (), echo (), empty (), eval (), exit (), isset (), list (), print () или не установлен ().

Метод экземпляра объекта передается как массив, содержащий объект с индексом 0 и имя метода с индексом 1.

Методы статического класса также можно передавать без создания экземпляра объекта этого класса, передавая имя класса вместо объекта с индексом 0.

Итак, чтобы использовать статический метод вместо строки обратного вызова, вы должны использовать

array('className','methodName');

Если Kohana использует стандартные обратные вызовы PHP, это должно дать вам то, что вы хотите.

1 голос
/ 18 января 2010

Чтобы использовать обратный вызов статического метода, обратный вызов должен быть массивом, например:

array('MyCoolClassName', 'methodName');

, поэтому при условии использования call_user_func вызов вашего метода должен быть:

$validation->pre_filter( 'field_name', array('MyCoolClassName', 'methodName'));

или если вам нужно использовать экземпляр объекта:

$validation->pre_filter( 'field_name', array($objectInstance, 'methodName'));

...