2012-11-19 105 views
4

从Javascript移植一些代码我有这种不方便。例如:PHP等效于Javascript“with”范围声明

在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相同comportament,在第二个代码示例数学是多余的。

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

我添加以下代码作为新的例子:

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->Registers[$i]声明,但如果所有的处理代码在像类的类成为消毒。

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

我想要一种方法来做一个更短,没有重复的代码。

+0

为什么你要使用类,当你想要的功能?请参阅http://php.net/cos:无前缀;) – KingCrunch

+1

因为在某些情况下,它减少了键入的代码量,使得最终结果更加清晰和逻辑性与第一个示例类似。 –

+1

@AllysondePaula,在更多情况下,'with'引入了错误。如果您完全了解这些错误的性质并知道您在做什么,您应该只使用它。 – gpojd

回答

4

你在找什么更类似于Java的不是JavaScript,Java中this资格是可选的,可以被排除在外。该javascript的with语句是一半功能,因为它甚至不分配任务。

PHP没有这个功能,你必须每次明确输入$this->

0

PHP范围与Javascript非常不同。我想我能想到的最好的方法就是扩展一个班级,并且使用$this->而不是所有的班级名称 - 您有可以与我们分享的用例吗?

+0

Kavi,我会编辑第一篇文章到另一个例子。 $ this-> scope在这种情况下是多余的 –

0

pi()cos(),& sin()都保留函数在PHP

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

我不认为OP *字面意思*想缩短他的PHP触发代码(...或者他是否?)。也就是说,OP的一个实际的PHP用例会让事情变得更加清晰。 – apsillers

+0

是的,我知道......这仅仅是一个例子 - 第三个例子(在文章中编辑)对我的问题更加清楚。 –

+0

我想要一个更短,没有重复代码的情况 –