我想将函数存储在数组
中将数组发送到另一个页面
然后执行它
我已阅读Can you store a function in a PHP array但仍不知道该怎么做
这是我尝试的内容
control.php (从这里开始)
<?php
function getFirstFunction(){ echo "first function executed"; }
$data = array();
$data[0] = getFirstFunction();
$data[1] = function(){ echo "second function executed"; };
$data[2] = function(){ require_once "additional.php"; };
$data[3] = "my string";
header('Location: view.php?data='.$data);
?>
additional.php
<?php echo "additional included" ?>
view.php
<?php
if( isset($_GET['data']) ){
foreach( $_GET['data'] as $temp ){
if( is_callable($temp) ){
$temp;
}else{
"its not a function";
}
}
}
?>
我的错误=
警告:在第4行的D:\ Workspace \ Web \ latihanns \ php \ get \ view.php中为foreach()提供的参数无效
修改 感谢您通知此代码危险。我不会在现场使用此代码。我只是尝试在数组中学习存储函数然后调用它。然后我只是好奇如果我在另一页上调用它。我只是好奇...我让我的代码看起来清晰简单,因为我害怕如果我写了复杂的代码,没有人会在这里或我的帖子将关闭太本地化...
答案 0 :(得分:1)
如果要将除字符串之外的任何内容传递到URL,则只有选项将其转换为字符串形式,该形式可以与原始类型相反。 PHP提供了一个名为serialize()
的函数,它将任何东西转换为字符串。之后,您可以调用unserialize()
将字符串转换回原始数据。因此,您必须将 control.php 中的一行更改为:
header('Location: view.php?data='.serialize($data));
在文件 view.php 中,您必须将一行更改为:
foreach( unserialize($_GET['data']) as $temp ){
但是你必须解决更多的问题。如果您有可调用变量,则无法使用$variable
调用函数,但使用$variable()
调用函数。值得一提的是,如果你在变量中有真正的函数(匿名函数,Closure等),或者变量是具有存在函数名称的简单字符串,那么在PHP中并不重要。
但是你在 control.php 中还有另一个错误。代码$data[0] = getFirstFunction();
不会传递函数getFirstFunction使其可调用,它只调用函数并将其返回值放入变量。您可以将getFirstFunction定义为$data[1]
中的函数之类的匿名函数,或者将其作为$data[0] = 'getFirstFunction'
之类的字符串传递,这将起作用。
最后 - 正如任何人在这里提到的那样 - 非常危险你不应该在公共服务器上使用它。