Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组中的PHP存储函数_Php_Arrays_Function - Fatal编程技术网

数组中的PHP存储函数

数组中的PHP存储函数,php,arrays,function,Php,Arrays,Function,我想在数组中存储函数 将数组发送到另一页 然后执行它 我已经读过了,但还是不知道该怎么办 这是我尝试的 control.php(从这里开始) additional.php <?php echo "additional included" ?> <?php if( isset($_GET['data']) ){ foreach( $_GET['data'] as $temp ){ if( is_callable($t

我想在数组中存储函数

将数组发送到另一页

然后执行它

我已经读过了,但还是不知道该怎么办

这是我尝试的

control.php(从这里开始)


additional.php

<?php   echo "additional included"   ?>
<?php
    if( isset($_GET['data']) ){

        foreach( $_GET['data'] as $temp ){
            if( is_callable($temp) ){
                $temp;

            }else{
                "its not a function";
            }
        }
    }
?>

view.php

<?php   echo "additional included"   ?>
<?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()提供的参数无效

编辑
感谢您告知此代码非常危险。我不会在实际生活中使用此代码。我只是尝试学习数组中的存储函数,然后调用它。然后我只是好奇如果我在另一页上调用它。我只是好奇。。。我在这里让我的代码看起来清晰而简单,因为我担心如果我写了复杂的代码,没有人会在这里,或者我的文章会因为太本地化而关闭…

如果你想将字符串以外的任何内容传递到URL,唯一的选择是将其转换为字符串形式,这可以与原始类型可逆。PHP提供了名为
serialize()
的函数,它可以将任何内容转换为字符串。之后,可以调用
unserialize()
将字符串转换回原始数据。因此,您必须将control.php中的一行更改为:

header('Location: view.php?data='.serialize($data));
在文件view.php中,必须将一行更改为:

foreach( unserialize($_GET['data']) as $temp ){
但你必须解决更多的问题。如果您有可调用变量,则不能使用
$variable
调用函数,而是使用
$variable()
调用函数。值得一提的是,在PHP中,变量中是否有实函数(匿名函数、闭包等),或者变量是否是名为exists函数的简单字符串并不重要


然而,control.php中甚至还有另一个bug。Code$data[0]=getFirstFunction()不会传递函数getFirstFunction使其可调用,它只调用函数并将其返回值放入变量。您可以在
$data[1]
中将getFirstFunction定义为类似于匿名函数的函数,或者只将其作为类似于
$data[0]=“getFirstFunction”
的字符串传递即可


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

var\u dump($\u GET['data'])
PS:您是否意识到,即使有可能,任何人都可以在您的服务器上传递他们想要调用的任何内容。您不能只在这样的URL中放置原始数组。
$data[0]=getFirstFunction()
这将在数据数组中存储
getFirstFunction()
的返回值,而不是代码。@ilike:
json
不是特定于javascript的格式。它也不支持函数序列化。您可能把它与javascript对象混淆了。“正如我的问题所说”——我问了两次,现在将重复最后三次:你试图用这样一个奇怪的解决方案解决的原始问题是什么?@ilike:你想学习一些没有意义、没有人会使用的东西还是什么?1.可以在数组2中保存对匿名函数的引用。不能序列化匿名函数。还有什么你不清楚的吗?那么,你认为匿名函数会被序列化吗?我刚刚意识到,我不知道匿名函数(闭包)是否可以(取消)序列化(很可能不会)。你必须试一试。但是,如果您在view.php中定义了这些函数,并将它们的名称作为字符串传递到该数组中,那么它肯定会起作用?PS:我不是一个OPO,整个问题都是毫无意义的,因为通过url发送东西然后执行是非常糟糕的做法。所以我把这个问题用于它唯一有用的目的——从荒谬的例子中学到一些东西。我至少告诉他serializable的用法——这也是问题的一部分——如何将数组或其他类型传递给URL。要完成这个答案,有一种更简单但可行的方法。代替匿名函数,将函数定义(原始代码)保存到字符串中,然后通过eval()定义并运行该函数