php extract()用法和用途

时间:2017-08-15 14:26:24

标签: php

我(想)我理解php的extract()函数的功能。但是,我正在阅读一些代码,我看到了这样的事情:

extract(['a' => '', 'b' => '', 'c' => 1, 'd' => 0]);

我的问题:

1:这在功能上与以下不同:

$a = ''; $b = ''; $c = 1; $d = 0;

2:使用extract()进行变量声明/赋值的原因是什么?

2 个答案:

答案 0 :(得分:1)

这在功能上与......不同吗

两行代码都不相同。 extract返回将键设置为变量名称的值,值为该变量等于的值,在每行代码中描述,使它们在功能上等效。

使用extract()进行变量声明/赋值的原因是什么?

合理的用例是在函数上使用extract,该函数返回具有已知键的值数组。这样做可以节省您为每个存储值编写声明行的时间。我说已知密钥是因为尽管使用array_keysvariable variables可以使用未知密钥,但您可以通过这样做开始进入可疑编码技术领域。

extract的文档中指出,"不要对不受信任的数据使用extract()...",其中包括可能被恶意更改的用户输入数据。虽然这意味着在$ _POST上使用extract对于公共版本是不合适的,但是对于测试或个人项目执行此操作没有任何功能上的错误,您可以保证$ _POST的值符合预期。

请记住,使用extract时存在一定程度的歧义,如果您的程序需要在以后维护,请了解extract语句返回的内容或查找变量的来源来自提取物可能很难。 extract在程序中有其用途,但应附有评论,概述其正在做的事情,以便将来的参考更清晰。

答案 1 :(得分:0)

目的。 1.它可以用作list()的一个版本。但是在提取()的情况下,你不需要关心变量的顺序。 此外,从数组中提取的变量属于特定范围。 在使用db的情况下,您可以确定var存在

function foo($db){
    $hdl =  $db->prepare("SELECT * FROM test.first");
    $hdl->execute();
    $resultArray = $hdl->fetch(PDO::FETCH_ASSOC);
    extract($resultArray,EXTR_PREFIX_SAME, "wddx");
    echo $id . "<br>";
    echo $name . "<br>";
    echo $email . "<br>";
}

2.使用MVC时将变量传递到视图中

//View.php
class View {
    function render($filename = null) {
        if ($filename !== null) {
            $this->filename = $filename;
        }
        unset($filename);
        extract($this->variables);
        ob_start();
        $this->returned = include($this->dir . $this->filename);
        return ob_get_clean();
    }
}

//test.php
$view = new View;
$view->filename = 'test.phtml';
$view->dir = './';
$view->variables = array('test' => 'tset');
echo $view->render('test.phtml');
var_dump($view->returned);

//test.phtml
<?php echo $test; ?>