【问题标题】:PHP equivalent to Javascript "with" scope statementPHP 等效于 Javascript "with" 范围声明
【发布时间】:2012-11-07 21:11:54
【问题描述】:

从 Javascript 移植一些代码给我带来了不便。例如:

在javascript中我们可以生成这段代码。

var a, x, y;
var r = 10;
with (Math) {
  a = PI * r * r;
  x = r * cos(PI);
  y = r * sin(PI / 2);
}

相反

a = Math.PI * r * r;
x = r * Math.cos(Math.PI);
y = r * Math.sin(Math.PI / 2);

在最后一个例子中,在 PHP 和 IE 中也是一样的,在第二个代码例子中 Math 是多余的。

有人有任何解决方案来清晰优雅的代码吗?

我正在添加以下代码作为新示例:

class MyExampleClass {

    function example {

        for($i = 0; $i < count($this->Registers); $i++) {
            $r = "50";
            $r .= $this->ZeroFill($this->numericOnly($this->Registers[$i]->Id)), 15) . $this->ZeroFill($this->numericOnly($this->Registers[$i]->Inscription), 25);
            $r .= $this->ZeroFill($this->Registers[$i]->Model, 2 );
            $r .= $this->PadR($this->alpha($this->Registers[$i]->Date), 10 );
            $this->WriteRecord( $r);
        }
    }

在第三个示例中,我可以在 $this-&gt;Registers[$i] 的 for 语句中使用 temp $var,但如果所有处理代码都在像 Sanitize 类这样的类中。

with (Sanitize) {
  $r .= ZeroFill(numericOnly($tmp), 15); // are much more clear and using OO
}

我想要一种方法来编写更短且不重复的代码。

【问题讨论】:

  • 为什么要使用类,而不是函数?见php.net/cos:没有前缀;)
  • 因为在某些情况下,它减少了键入的代码量,使最终结果更清晰,逻辑如第一个例子。
  • @AllysondePaula,在更多情况下,with 会引入错误。只有在完全了解这些错误的性质并知道自己在做什么的情况下,才应该使用它。
  • With 真的可以引入错误,我同意。但在某些情况下,缩短代码更容易阅读和理解业务逻辑。

标签: php javascript with-statement


【解决方案1】:

您要查找的内容更类似于 java 而不是 javascript,在 java 中,this 限定是可选的,可以省略。 javascript 的 with 语句只有一半功能,因为它甚至不能用于赋值。

PHP 没有这个功能,您每次都必须明确输入$this-&gt;

【讨论】:

    【解决方案2】:

    PHP 作用域与 Javascript 非常不同。我想我能想到的最好的方法是扩展一个类并使用 $this-&gt; 而不是到处使用类名 - 你有可以与我们分享的用例吗?

    【讨论】:

    • Kavi,我会将第一篇文章编辑为另一个示例。 $this-> 作用域在这种情况下是多余的
    【解决方案3】:

    pi()cos()、&sin()都是PHP中的保留函数

    <?php
    $r = 10;
    $a = pi() * $r * $r;
    $x = $r * cos(pi());
    $y = $r * sin(pi() / 2);
    ?>
    

    【讨论】:

    • 我不认为 OP 字面上 想要缩短他的 PHP 触发代码(......或者他是吗?)。也就是说,来自 OP 的实际 PHP 用例会让事情变得更清楚。
    • 是的,我知道...这只是一个例子——第三个例子(在帖子中编辑)更清楚我的问题。
    猜你喜欢
    • 2014-01-24
    • 2020-06-08
    • 2019-12-20
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多