PHP 5.3 и анонимные функции по умолчанию? - PullRequest
3 голосов
/ 07 сентября 2011

В php 5.3, когда вы создаете анонимную функцию, вы можете установить значения по умолчанию?

Как и в обычной функции, вы выполняете

функцию tim ($ a = 123) {

}

, где 123 - значение по умолчанию для $ a.Что такое в анонимных функциях?

ОБНОВЛЕНИЕ

У меня проблемы с этим в этом контексте:

//$data is an object;
$data->title = 'test';
add_filter('title',function($current, $new = $data->title ){ return $new; });

производит "неожиданный T_VARIABLE"

прекрасно работает без бита $data->title, но я очень хочу передать это ...

add_filter('title',function($current, $new = 'some-title' ){ return $new; });

Я добавляю фильтр в Wordpress.Работает нормально, если я явно установил его, но я хочу извлечь его из другой переменной.Это возможно?

Ответы [ 4 ]

9 голосов
/ 07 сентября 2011
$ php -r '$foo = function($a = 123){echo $a, PHP_EOL;};$foo(1);$foo();'
1
123

Так что да

Обновление

Вы можете назначать только простые значения по умолчанию для аргументов.Из руководства

Значением по умолчанию должно быть константное выражение, а не (например) переменная, член класса или вызов функции.

Попробуйте передать внешнюю переменную через ключевое слово use

add_filter('title', function($current, $new = null) use ($data) {
    if (null === $new) {
        $new = $data->title;
    }
    return $new;
});
1 голос
/ 07 сентября 2011

Да, вы можете установить значения по умолчанию, такие как

0 голосов
/ 09 июля 2015

Вы можете использовать мою крошечную библиотеку ValueResolver в этом случае, например:

add_filter('title', function($current, $new = null) use ($data) {
    return ValueResolver::resolve($new, $data->title);
});

и не забудьте использовать пространство имен use LapaLabs\ValueResolver\Resolver\ValueResolver;

ТамКроме того, можно указывать типы, например, если значение вашей переменной должно быть integer, поэтому используйте это:

$id = ValueResolver::toInteger('6 apples', 1); // returns 6
$id = ValueResolver::toInteger('There are no apples', 1); // returns 1 (used default value)

Проверьте документы для получения дополнительных примеров

0 голосов
/ 07 сентября 2011

Вот пример использования анонимной функции в PHP с сайта PHP.

<?php
echo preg_replace_callback(
  '~-([a-z])~',
  function ($match) {
    return strtoupper($match[1]);
  },
  'hello-world'
);

См. Часть function ($match) {?Вы можете определить там, как и любую другую функцию.

...