П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Руководство по PHP
Пред. След.

create_function

(PHP 4 >= 4.0.1, PHP 5)

create_function -- Создаёт анонимную (lambda-style) функцию

Описание

string create_function ( string args, string code )

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

Вы можете использовать эту функцию (к примеру) для создания функций на основании информации, полученной во время выполнения программы:

Пример 1. Создание анонимной функции с помощью create_function()

<?php
$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";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>

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

Пример 2. Создание функции-обработчика с помощью create_function()

<?php
function process($var1, $var2, $farr)
{
    for (
$f=0; $f < count($farr); $f++) {
        echo
$farr[$f]($var1, $var2) . "\n";
    }
}

// create a bunch of math functions
$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);

// now make a bunch of string processing functions
$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-style (анонимных) функций - это создание функций-обработчиков, например, при использовании array_walk() или usort()

Пример 3. Использование анонимной функции как функции-обработчика

<?php
$av
= array("the ", "a ", "that ", "this ");
array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
print_r($av);
?>

выводит:

Array
(
  [0] => the mango
  [1] => a mango
  [2] => that mango
  [3] => this mango
)

Сортировка строк по их длине

<?php

$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
)

Теперь отсортируем их в обратном порядке:

<?php

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
)



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru