2011-08-26 55 views
1

我们都知道像这样的电话:如何在PHP中使用自己的函数/方法模拟list()?

list($a, $b) = explode(':', 'A:B'); 

但如何让这可以用同样的方法的自定义函数?

$obj->mylist($a, $b) = explode(':', 'A:B'); 
mylist($a, $b) = explode(':', 'A:B'); 

如果我使用上面的代码行我总是得到:“不能在写上下文中使用方法的返回值[...]” 如何定义函数/类的方法来接受那种类型的转让?如何通过explode()返回数组?通过func_get_args()?

当然,还有其他方法可以指定explode()的结果,但这不是这个问题的主题。例如。

$obj->mylist($a, $b, explode(':', 'A:B')); 
mylist($a, $b, explode(':', 'A:B')); 

回答

8

这是不可能的,因为你不能写一个可以用作左值的方法。

list()不是一个函数,而是一个语言结构,这就是为什么它可以用它的方式使用。

0

你不能那样做。 list()是一种语言结构,而不是一个函数,PHP中没有办法让函数的行为像这样。它会导致语法错误。

反正你想从mylist($a, $b) = explode(':', 'A:B');得到什么样的意思?如果它是列表而不是mylist,它将等于:

$arr = explode(':', 'A:B'); 
$a = $arr[0]; 
$b = $arr[1]; 
unset($arr); 

如何重新定义左侧功能的含义?用你的对象的例子,你可以做这样的事情:

list($obj->a, $obj->b) = explode(':', 'A:B'); 

你试图得到什么样的行为?也许还有另一种方式。

相关问题