我主要是一个JS开发人员,使用PHP的服务器端踢我想看看是否有一个方法在PHP类似于JS:
var something = {
action1: function() { alert('Fire 1!'); },
action2: function() { alert('Fire 2!'); },
action3: function() { alert('Fire 3!'); }
}
然后允许我调用:
something.action2(); // Alerts 'Fire 2!'
这是一个相对较小的应用程序,我正在工作,我想避免构建类。由于PHP是如此小的一部分,我希望尽可能保持代码风格相似。
使用关联数组和匿名函数(必须至少有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
)将无法从函数中访问其他函数或数组项。
PHP没有JavaScript那样的对象形式,因为PHP是一种基于类的语言,而JavaScript是一种基于原型的语言。这实际上意味着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
或者是静态类?
<?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();
这就可以了(假设你想创建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
?>
对Tim Cooper回答的修改
$o = (object) array(
'action1' => function() { echo "Fire 1'n"; },
'action2' => function() { echo "Fire 2'n"; },
'action3' => function() { echo "Fire 3'n"; }
);
$o->action2();