为什么在php类中作为数组项的函数不起作用

时间:2011-04-30 14:59:01

标签: php arrays class function

例如,我有这样的代码:

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

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

工作正常! 但是如果$ A不仅仅是一个变量,而是一个Class方法 - 那么这不起作用:

<?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。对不起,我在调用方法时犯了一些错误,我很着急。但不管我怎么称呼。即使我只是在没有调用

的情况下声明了类,也会出现错误

3 个答案:

答案 0 :(得分:3)

据我所知,在定义类成员时你不能有任何动态,但你可以动态设置它如下所示。所以基本上,你不能这样做是因为你不能这样做: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()中定义整个数组,包含方法(所以基本上改变你的代码)。

答案 1 :(得分:2)

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

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

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

编辑:我也首先看到并更正了$t->$a,但我还需要移动声明以使其正常工作。

答案 2 :(得分:1)

好吧,它有点工作......

<?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']();

?>