gpt4 book ai didi

php - 将变量导出到 PHP 中的先前范围

转载 作者:行者123 更新时间:2023-12-03 23:32:53 26 4
gpt4 key购买 nike

现在,在您开始讨论不应该如何混合范围之前:我意识到这一点。但是,在这种情况下,要么必须发生范围混合,要么必须发生主要的代码重复——周围没有任何东西。而且我更喜欢范围混合。

也就是说,我想要这个代码:

function a() {
$a = "a";
$b = "b";
$c = "c";
}
function b() {
a();
echo $a . $b . $c;
}
b(); // Output: abc
echo $a; // Should raise a notice that $a is undefined

能够按照评论工作。我知道这在大多数语言中是不可能的——不过我可以在 Ruby 中做到这一点;并想知道你是否可以用 PHP 做到这一点。

在实际情况下,变量的名称是事先不知道的。

同样,这是代码重复或这个——绝对没有办法解决。

另外,如果 a 必须是 a('b') 之类的东西,那也没关系。


实际上,代码是这样的:

static function renderError($what, $vararray) {
foreach($vararray as $key => $val) { /* this foreach is the code we want to decouple */
$key = 'e_'.$key;
$$key = htmlspecialchars($val);
}
ob_clean();
exit(eval('?>'.file_get_contents(ROOT."/templates/$what.php")));
}

使用 E_Render::renderError('NotFound', array( 'requested_url' => '/notfound', 'misspelling' => '/reallynotfound' ));

然后,在 templates/NotFound.php 中,您将有类似的内容:

<html>
<body>
<?php echo $e_requested_url; ?> could not be found. Did you mean <?php echo $e_misspelling: ?>?
</body>
</html>

我们真的不希望我们的模板作者做更多的事情......尽管如果没有更好的可用,也可以完成 $e['requested_url']

最佳答案

这就是我们有 OO 的原因:

class Foo {

function a() {
$this->a = "a";
$this->b = "b";
$this->c = "c";
}

function b() {
$this->a();
echo $this->a . $this->b . $this->c;
}
}

$f = new Foo;
$f->b(); // Output: abc
echo $a; // Should raise a notice that $a is undefined

或者:

function a() {
$a = "a";
$b = "b";
$c = "c";

return compact('a', 'b', 'c');
}

function b() {
extract(a());
echo $a . $b . $c;
}

见:compact() , extract()

否则我看不到在不彻底改变语言的情况下这样做的方法。

PS:如果你觉得这个特性如此重要,为什么不直接使用 Ruby?

关于php - 将变量导出到 PHP 中的先前范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3539636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com