Есть ли переменная функции в PHP, как в JavaScript? - PullRequest
1 голос
/ 20 апреля 2011

В JavaScript вы можете иметь:

var blabla = function(arg){
  ...
};

Есть ли что-то подобное в PHP?

Я знаю о create_function(), но действительно сложно запихнуть ваш код в строковый аргумент.

Ответы [ 5 ]

7 голосов
/ 20 апреля 2011

Начиная с PHP 5.3 вы можете создавать анонимные функции, такие как:

$var = 1;
$func = function( $arg ) use ($var) {
     return $arg + $var;
};

Предложение use требуется для доступа к переменным, определенным вне анонимной функции.

Если вы хотите изменить внешнюю переменную в анонимной функции, вы должны объявить ее как ссылку (добавив & перед $) в части use:

$var = 1;
$func = function() use ( &$var ) {
   $var = 42;
}
$func();
// $var == 42 now

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

5 голосов
/ 20 апреля 2011

Они называются анонимными функциями. В PHP> = 5,3 вы можете сделать:

$func = function($a, $b) {
    return $a + $b;
};

$result = $func(3, 4); // returns 7

Вы даже можете иметь замыкания:

$c = 5;
$func = function($a, $b) use ($c) {
    return ($a + $b) * $c;
};

$result = $func(3, 4); // returns 35

Но учтите: следующий фрагмент JavaScript можно воспроизвести только в PHP с использованием ссылок:

var c = 5;
var f = function(a, b) {
    return (a + b) * c;
};
var r = f(3, 4); // returns 35
c = 6;
r = f(3, 4); // returns 42

В PHP это должно выглядеть так:

$c = 5;
$func = function($a, $b) use (&$c) {
    return ($a + $b) * $c;
};

$result = $func(3, 4); // returns 35
$c = 6;   
$result = $func(3, 4); // returns 42

До версии 5.3 вы должны использовать create_function() для создания анонимных функций.

2 голосов
/ 20 апреля 2011

Да, это доступно в php 5.3.X

http://php.net/manual/en/functions.anonymous.php

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
?>
1 голос
/ 20 апреля 2011

Синтаксис очень похож на синтаксис JavaScript; для вашего конкретного примера это будет что-то вроде следующего:

$blabla = function($arg){
  ...
};

Единственное отличие заключается в замене «var» на «$» и добавлении «$» перед «arg».

1 голос
/ 20 апреля 2011

Анонимные функции доступны с PHP 5.3.0. ссылка

...