кто-нибудь пробовал новый бета-релиз php с анонимными функциями? - PullRequest
1 голос
/ 02 апреля 2009

кто-нибудь пробовал новую версию php 5.3.0 RC1 и немного играл с анонимными функциями?

Я хотел бы знать, можете ли вы использовать его как python для функционального программирования.

Например, вы можете сделать что-то вроде:

def sinus(x):
  if x<=0.1:
    return x
  else:
    return (lambda x: 3*x-4*x*x*x)(sinus(x/3))

print sinus(172.0)

Или лучше, вы можете делать все классные вещи, как в Python или LISP? Есть ли ограничения? К сожалению, у меня нет лучшего примера. :)

Ответы [ 2 ]

3 голосов
/ 02 апреля 2009

Новые анонимные функции в PHP 5.3 очень полезны в существующих функциях обратного вызова. Как показывает этот пример.

echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld

Это все еще хитрость, поскольку в PHP 5.3 реализован класс Closure, который делает доступным экземпляр класса.

Цитата из Википедии:

PHP 5.3 имитирует анонимные функции, но не поддерживает настоящие анонимные функции, поскольку функции PHP по-прежнему не являются функциями первого класса.

Подробнее о замыканиях вы можете прочитать в этом PHP RFC

1 голос
/ 02 апреля 2009

Начиная с PHP 4, вы можете использовать функцию create_function , чтобы делать то, что вы хотите.

В вашем примере:

<?php

function sinus($x){
  if($x < 0.1) {
    return $x;
  } else {
    $func = create_function('$x', 'return 3*$x-4*$x*$x*$x');
    return $func( sinus($x/3) );
  }
}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...