установка области видимости массива php - PullRequest
3 голосов
/ 25 февраля 2010

Привет всем, время от времени я использую array_map для написания рекурсивных методов. например

function stripSlashesRecursive( $value ){

    $value = is_array($value) ?
        array_map( 'stripSlashesRecursive', $value) :
    stripslashes( $value );
    return $value;
}

Вопрос:

скажем, я хочу поместить эту функцию в статический класс, как бы я использовал array_map для области действия статического метода в классе, как Sanitize :: stripSlashesRecursive (); Я уверен, что это просто, но я просто не могу понять это, посмотрел на php.net.

Ответы [ 3 ]

16 голосов
/ 25 февраля 2010

При использовании метода класса в качестве обратного вызова для таких функций, как array_map() и usort(), необходимо отправить обратный вызов в виде массива из двух значений. 2-е значение всегда является именем метода в виде строки. 1-е значение - это контекст (имя класса или объект)

// Static outside of class context
array_map( array( 'ClassName', 'methodName' ), $array );

// Static inside class context
array_map( array( __CLASS__, 'methodName' ), $array );

// Non-static outside of object context
array_map( array( $object, 'methodName' ), $array );

// Non-static inside of object context
array_map( array( $this, 'methodName' ), $array );
1 голос
/ 25 февраля 2010

array_map принимает обратный вызов в качестве первого параметра.

И обратный вызов статического метода записывается так:

array('classname', 'methodname')


Это означает, что в вашем конкретном случае вы будете использовать:

array_map(array('stripSlashesRecursive', ''), $value);


Для получения дополнительной информации о обратных вызовах см. Этот раздел руководства по PHP: Псевдотипы и переменные, используемые в этой документации - callback .

0 голосов
/ 25 февраля 2010
array_map( array('Sanitize', 'stripSlashesRecursive'), $value) ...
...