2010-04-09 81 views
1

我正在尝试学习PHP,我想知道是否有一些函数等价结构:Javascript和PHP之间的代码等价

在JS中我可以做:

var t = function() {}; 
t(); 

myObj.DoStuff = function() {} // here I add a method at run-time 
myObj.DoStuff(); 
myObj["DoStuff"](); 

var j = myObj.DoStuff; 
j(); 

等等功能评估。

在Js对象中是关联数组,因此每个属性都可以使用 下标符号进行访问...

我可以在运行时向类模板添加一个方法,以便接下来它的对象实例可以拥有它吗?

在JS中,我可以通过原型函数属性来实现。

回答

0

基本上,这是不可能在PHP中。有一些技巧可以让你在某些情况下为新对象添加功能(如使用魔术__call方法),但与JavaScript原型无关。

如果您在服务器端语言中需要类似的东西,您可能需要学习Python而不是PHP。

+0

请记住,PHP 5.3引入了完整的lambda函数,所以这确实是可能的。 – mattbasta 2010-04-09 15:25:32

+0

Lambdas不允许您将方法添加到现有对象。它们允许你创建一个内联的匿名函数。 – RaYell 2010-04-10 13:57:30

2

这是可能的,但它是不健康的,不是一个好的做法或你想在每天的基础上做的事情。 JavaScript和PHP的组织方式不同,您将使用PHP中的类和方法,其中JavaScript中它们是对象和函数。

这里是你正在尝试做的写在5.2+那里有没有匿名函数是什么一个例子:

<?php 

/* 
var t = function() {}; 
t(); 
*/ 

function _t() { 
    echo '<br>T'; 
} 

$t = '_t'; 
$t(); 

/* 
myObj.DoStuff = function() {} // here I add a method at run-time 
myObj.DoStuff(); 
myObj["DoStuff"](); 

var j = myObj.DoStuff; 
j(); 
*/ 
class myObj { 
    var $doStuff = ''; 
} 

function _DoStuff() { 
    echo '<br>Do Stuff'; 
} 

$myObj = new myObj(); 
$myObj->doStuff = '_DoStuff'; 
$j = $myObj->doStuff; 
$j(); 

?> 

在5.3+他们推出anonymouse功能,所以你甚至可以做到这一点

$t = function() { 
    echo 'T'; 
} 
$t(); 

更多关于此匿名函数 - http://php.net/manual/en/functions.anonymous.php

我建议你阅读更多关于Variable function names其中大部分是很有帮助。

你也可以在一个Class中动态注入函数,这是你尝试做的第二件事,但它通常不是一个好主意。一个人在这里做了一些工作 - http://www.gen-x-design.com/archives/dynamically-add-functions-to-php-classes/

+0

为什么我可以通过: $ myObj = new myObj(); $ myObj-> doStuff = function(){}; $ j = $ myObj-> doStuff; $ j(); 我不能直接调用$ myObj-> doStuff();所以我不明白为什么如果我有一个函数返回一个数组我不能这样做: myFunc()[2]; //它需要3°的元素... PHP是一种动态语言吗? 可能是我期待Python ... – xdevel2000 2010-04-12 13:35:26

+0

这是它是什么。 – 2010-04-12 14:07:18