如果我可以创建create_function()
,为什么会有function something() { ... }
函数。 create_function(string $args, string $code);
真正意味着什么?
例如,我应该echo
特定值,写得很长:
function sayHi($name){
echo 'Hi,' . $name;
}
//using it like:
sayHi('Jacques Marais');
但是然后使用create_function()
方法:
$sayHi = create_function('$name', 'echo \'Hi,\' . $name;');
//using it like:
$sayHi('Jacques Marais');
答案 0 :(得分:4)
因为你可以在很多方面使用它..即使在阵列中!
$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)
);
你只看一个例子,但是这个函数的使用更复杂,你可以用许多不同的方式使用它,这比使用function()
更容易。
与PHP.net上的示例#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
)
答案 1 :(得分:2)
create_function()主要来自PHP 4,在新的PHP(&gt; = 5)中你应该使用匿名函数。差异可能是范围和垃圾收集,不确定。 create_function()必须评估字符串,它可能不太安全。我可以看到该函数已被弃用,有更好的方法甚至如何动态地向类添加方法,你也可以在数组中使用匿名(lambda)函数。
答案 2 :(得分:1)
我想从功能编程来到php ...
它正在呼叫anonymous function。如果需要将函数传递给另一个函数,可以使用它。例如php的usort功能。当然不仅仅是为了这个。您可以在数组中使用它,也可以从其他函数返回该函数。
答案 3 :(得分:1)
目标是动态创建功能。不替换手动声明,否则我同意这不会真正有用。
因此,您可以创建名称作为参数传递的函数,就像在类上使用magic methods __get()一样,或者在循环中使用它来声明几个类似的函数。
答案 4 :(得分:1)
在PHP 5.3.0之前,这是唯一可以定义anonymous function并具有所有(dis)优势的方法。
此外,与eval一起,它是人们在运行时定义函数的方法之一。
我能想到的一个很好的例子:
$dbTables = array('user' => NULL, 'article' => NULL);
foreach($dbTables as $table => $func)
{
$dbTables[$table] = create_function('', 'return mysql_query(...);');
}
$users = $dbTables['user']();
显然使用magic methods和类更好,而且大多数PHP ORM的工作方式都很好。
答案 5 :(得分:0)
if (!empty($_POST))
{
$arguments = $_POST['arguments'];
$parameters = $_POST['parameters'];
$method = $_POST['method'];
if (!empty($method) && !empty($arguments) && !empty($parameters))
{
$newfunc = create_function($parameters, $method);
if (function_exists($newfunc))
{
call_user_func_array($newfunc, explode(",", $arguments));
}
else
{
echo "Function not aviable!<br>";
}
}
}
else { ?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
Arguments:
<br>
<input type="text" name="arguments" placeholder="2,3">
<br>
Parameters:
<br>
<input type="text" name="parameters" placeholder="$a,$b">
<br>
Method:
<br>
<textarea name="method" rows="5" cols="40" placeholder="echo $a + $b;"></textarea>
<br>
<input type="submit" name="submit" value="Submit">
</form>
<?php }
此示例可用于通过代码注入更改程序的行为。它可以&#34;技巧&#34;系统以某种方式表现而没有任何恶意。