2012-11-19 154 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

我想要一個更短,沒有重複代碼的情況 –