П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое







Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 98087 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 29051 раз(а).

Учебник HTML.
Просмотров 56179 раз(а).

Руководство по PHP5.
Просмотров 25925 раз(а).

Хостинг через призму DNS.
Просмотров 30458 раз(а).

Подборка текстов стандартных документов.
Просмотров 28958 раз(а).

Учебник PHP - Самоучитель
Просмотров 33680 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 34961 раз(а).

Внешние атаки...
Просмотров 26937 раз(а).

Учебник PHP.
Просмотров 22766 раз(а).

SSI в примерах.
Просмотров 17847 раз(а).



 
 



Учебник РНР
Назад Вперёд

create_function

(PHP 4 >= 4.0.1)

create_function - создаёт анонимную функцию (lambda-стиль).

Описание

string create_function (string args, string code)

Создаёт анонимную функцию из передаваемых параметров и возвращает уникальное имя для неё. Обычно аргументы args будут передаваться в единой закавыченной строке, это же рекомендуется и для code. Смысл использования отдельных закавыченных строк в том, чтобы защитить имена переменных от разбора, иначе, если вы используете двойные кавычки, появится необходимость мнемонизировать имена переменных, например, \$avar.

Вы можете использовать эту функцию для (например) создания функции из информации, получаемой на этапе прогона:
Пример 1. Создание анонимной функции с помощью create_function()
$newfunc = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2,M_E)."\n";
// выводит:
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599

Или, возможно, для создания главной функции-обработчика, которая может предоставлять набор операций для списка параметров:

Пример 2. Создание общей функции процессинга с помощью create_function()
function process($var1, $var2, $farr) {
    for ($f=0; $f < count($farr); $f++)
    echo $farr[$f]($var1,$var2)."\n";
}

// создаёт "пакет" math-функций
$f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}';
$f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);";
$f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }';
$farr = array(
    create_function('$x,$y', 'return "some trig: ".(sin($x) + $x*cos($y));'),
    create_function('$x,$y', 'return "a hypotenuse: ".sqrt($x*$x + $y*$y);'),
    create_function('$a,$b', $f1),
    create_function('$a,$b', $f2),
    create_function('$a,$b', $f3)
    );

echo "\nUsing the first array of anonymous functions\n";
echo "parameters: 2.3445, M_PI\n";
process(2.3445, M_PI, $farr);

// теперь создаёт "пакет" функций для работы со строками
$garr = array(
    create_function('$b,$a','if (strncmp($a,$b,3) == 0) return "** \"$a\" '.
    'and \"$b\"\n** Look the same to me! (looking at the first 3 chars)";'),
    create_function('$a,$b','; return "CRCs: ".crc32($a)." , ".crc32(b);'),
    create_function('$a,$b','; return "similar(a,b) = ".similar_text($a,$b,&$p)."($p%)";')
    );
echo "\nUsing the second array of anonymous functions\n";
process("Twas brilling and the slithy toves", "Twas the night", $garr);

и, после запуска кода на выполнение, вы получите на выводе:

Using the first array of anonymous functions
parameters: 2.3445, M_PI
some trig: -1.6291725057799
a hypotenuse: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a/b) = 0.27122299212594

Using the second array of anonymous functions
** "Twas the night" and "Twas brilling and the slithy toves"
** Look the same to me! (looking at the first 3 chars)
CRCs: -725381282 , 1908338681
similar(a,b) = 11(45.833333333333%)

Но, возможно, самым общим вариантом является использование функций lambda-стиля (анонимных) для создания callback-функций, например, при использовании array_walk() или usort().

Пример 3. Использование анонимных функций как callback-функций
$av = array("the ","a ","that ","this ");
array_walk($av, create_function('&$v,$k','$v = $v."mango";'));
print_r($av);  // for PHP 3 use var_dump()
// выводит:
// Array
// (
//   [0] => the mango
//   [1] => a mango
//   [2] => that mango
//   [3] => this mango
// )

// массив строк, упорядоченных от меньшей к большей
$sv = array("small","larger","a big string","it is a string thing");
print_r($sv);
// выводит:
// Array
// (
//   [0] => small
//   [1] => larger
//   [2] => a big string
//   [3] => it is a string thing
// )

// сортирует от большей к меньшей
usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);'));
print_r($sv);

// выводит:
// Array
// (
//   [0] => it is a string thing
//   [1] => a big string
//   [2] => larger
//   [3] => small
// )

Назад Оглавление Вперёд
call_user_func Вверх func_get_arg


 







Copyright © 2005-2011 Project.Net.Ru