2011-12-24 76 views
2

我主要是JS開發,使用PHP的服務器端踢,我想看看是否有一個在PHP類似JS的方法:JavaScript的風格包裝在PHP

var something = { 
    action1: function() { alert('Fire 1!'); }, 
    action2: function() { alert('Fire 2!'); }, 
    action3: function() { alert('Fire 3!'); } 
} 

然後允許我這樣稱呼,如:

something.action2(); // Alerts 'Fire 2!' 

它是一個相對較小的應用程序我的工作,我想避免的建築類。由於PHP是這麼小的一部分,我想盡可能保持代碼風格的相似性。

+0

如果你願意,你可以在服務器端使用Node.js的http://nodejs.org/ – Dimme 2011-12-24 20:20:37

回答

2

PHP沒有與JavaScript相同的對象形式,因爲PHP是class-based language,而JavaScript是prototype-based language。這基本上意味着PHP通過實例化一個類來創建對象。然而,JavaScript有對象,然後克隆創建新的對象。

如果你想保持你的代碼可以理解的,我建議你使用PHP類:

class SomeClass { 
    function alert($string) { 
     // Do something 
    } 
    function action1() { 
     $this->alert('Fire 1!'); 
    } 
    function action2() { 
     $this->alert('Fire 2!'); 
    } 
    function action3() { 
     $this->alert('Fire 3!'); 
    } 
} 

$something = new SomeClass(); 
$something->action2(); // Runs the action2 function of your object 
+0

還有點兒什麼我想編寫JavaScript,因此我會給你一個跑步。感謝您及時的回覆! – Fluidbyte 2011-12-24 20:33:51

3

使用關聯數組和匿名函數(必須有至少PHP 5.3)會爲你工作:

$arr = array(
    'action1' => function() { echo "Fire 1\n"; }, 
    'action2' => function() { echo "Fire 2\n"; }, 
    'action3' => function() { echo "Fire 3\n"; } 
); 

$arr['action1'](); // Fire 1 

請記住,你將無法從訪問其它功能或陣列的物品使用$this(在JavaScript中爲this)的功能。

也許如果你給了我們關於你想要做什麼的更多細節,我們可以舉一些更好的例子。

0

或許一個靜態類?

<?php 
class something { 
    public static function action1() { 
     echo 'Fire 1'; 
    } 

    public static function action2() { 
     echo 'Fire 2'; 
    } 

    public static function action3() { 
     echo 'Fire 3'; 
    } 
} 

something::action1(); 
something::action2(); 
something::action3(); 
0

這會工作(假設你想創建3個警報,如:P)。

<?php 
//Array of Functions 
$a = array 
(
    'action1' => function() { echo "<script>alert('Fire 1!');</script>"; }, 
    'action2' => function() { echo "<script>alert('Fire 2!');</script>"; }, 
    'action3' => function() { echo "<script>alert('Fire 3!');</script>"; } 
); 

$a['action1'](); // Fire 1 
$a['action2'](); // Fire 2 
$a['action3'](); // Fire 3 
?> 
0

蒂姆·庫珀的回答的修改

$o = (object) array(
    'action1' => function() { echo "Fire 1\n"; }, 
    'action2' => function() { echo "Fire 2\n"; }, 
    'action3' => function() { echo "Fire 3\n"; } 
); 

$o->action2();