PHP存储函数在数组中

时间:2013-11-24 03:58:17

标签: php arrays function

我想将函数存储在数组

将数组发送到另一个页面

然后执行它

我已阅读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()提供的参数无效

修改 感谢您通知此代码危险。我不会在现场使用此代码。我只是尝试在数组中学习存储函数然后调用它。然后我只是好奇如果我在另一页上调用它。我只是好奇...我让我的代码看起来清晰简单,因为我害怕如果我写了复杂的代码,没有人会在这里或我的帖子将关闭太本地化...

1 个答案:

答案 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'之类的字符串传递,这将起作用。

最后 - 正如任何人在这里提到的那样 - 非常危险你不应该在公共服务器上使用它。

相关问题