为什么函数在PHP类数组项不起作用

问题描述:

例如,我有这样的代码:为什么函数在PHP类数组项不起作用

<?php 
$A = array(
    'echoSmth' => function(){ 
     echo 'Smth'; 
    } 
); 

$A['echoSmth'](); // 'Smth' 
?> 

它工作正常! 但是如果$ A不只是一个变量,而是一个类的方法 - 比这不起作用:

<?php 

class AA { 

    public $A = array(
     'echoSmth' => function(){ // Parse Error here! 
      echo 'Smth'; 
     } 
    ); 

} 

// Fixed call: 
$t = new AA(); 
$t->A['echoSmth'](); 
// no matter what call, because error occurs early - in describing of class 

?> 

为什么它不工作? 它显示: Parse error: syntax error, unexpected T_FUNCTION

P.S.对不起,我用我称呼该方法的方式犯了一些错误,我很着急。但不管我怎么打电话。错误ocurrs,即使我只是声明类,而不致电

+2

尝试T- $>一[ 'echoSmth']();没有美元符号 – usoban 2011-04-30 15:04:46

+3

@usoban:a大写。 – 2011-04-30 15:09:23

+0

@marcel对,我在看最后一行,其中a是小写。我的坏:) – usoban 2011-04-30 15:11:59

据我所知,在定义一个类成员时你不能有动态的东西,但是你可以像下面那样动态地设置它。所以基本上,你不能这样做,因为你不能这样做:public $A = functionname();

此外,你的呼叫签名是不正确的,我已经在我的例子中修复它。

<?php 
class AA { 
    public $A = array(); 

    public function __construct() { 
     $a = function() { 
      echo 'Smth'; 
     }; 
     $this->A['echoSmth'] = $a; 
    } 
} 

$t = new AA(); 
$t->A['echoSmth'](); 

或者,也可以内__construct()限定整个阵列,包含方法(因此基本上移动您的代码)。

我得到了这个工作。不知道为什么不允许直接声明。

class AA { 
    var $A; 
    public function __construct() { 
     $this->A = array(
      'echoSmth' => function(){ 
       echo 'Smth'; 
      } 
     ); 
    } 
} 

$t = new AA(); 
$t->A['echoSmth'](); 

编辑:我也看到和纠正$t->$a第一,但我需要移动的声明,以及使其工作。

+2

他有一个错误,他使用$ t - > $ a而不是$ t-> a。你的代码是正确的,OP没有。这里没有php问题,只是在访问成员时出现一个简单的错误。 – 2011-04-30 15:07:35

+1

@Michael错误,在定义$ A的值时定义闭包存在解析错误(但是,那是一个错误)。 – 2011-04-30 15:08:23

+0

这也是真的rudi,我撇开了课堂,并假设他确实没有解析错误 - 显然,你不能相信任何人这些天,谢谢指出:) – 2011-04-30 15:10:14

好,它还挺工作...

<?php 

    class Bleh 
    { 

     public $f = array(); 

     public function register($name , $func) 
     { 

      $this->f[ $name ] = $func; 

     } 

    } 


    $foo = new Bleh; 
    $foo->register('bar' , function(){ echo 'foobar'; }); 

    $foo->f['bar'](); 

?>