drvvvuyia15070493 2013-06-25 17:18
浏览 19
已采纳

尝试创建匿名函数数组时出现语法错误[关闭]

I am trying to realize my own MVC framework and invented a very nice way to provide definitions of virtual fields and additional relations.

According to some other high-voted post on stackoverflow, this should actually work:

class User extends Model {

  public $hasOne = array('UserSetting');

  public $validate = array();

  public $virtualFields = array(
      'fullname' => function () {
          return $this->fname . ($this->mname ? ' ' . $this->mname : '') . ' ' . $this->lname;
      },
      'official_fullname' => function () {

      }
  );
}

But it doesn't work. It says: Parse error: syntax error, unexpected T_FUNCTION. What am I doing wrong?

PS. talking about this one Can you store a function in a PHP array?

  • 写回答

1条回答 默认 最新

  • douxie2023 2013-06-25 17:23
    关注

    You must define the methods in the constructor, or some other method, not directly in the class member declaration.

    class User extends Model {
    
      public $hasOne = array('UserSetting');
    
      public $validate = array();
    
      public $virtualFields = array();
    
      public function __construct() {
         $this->virtualFields = array(
            'fullname' => function () {
                return $this->fname . ($this->mname ? ' ' . $this->mname : '') . ' ' . $this->lname;
            },
            'official_fullname' => function () {
    
            }
        );
      }
    }
    

    While that works, PHP's magic method __get() is better suited to this task:

    class User extends Model {
    
      public $hasOne = array('UserSetting');
    
      public $validate = array();
    
      public function __get($key) {
         switch ($key) {
           case 'fullname':
               return $this->fname . ($this->mname ? ' ' . $this->mname : '') . ' ' . $this->lname;
           break;
    
           case 'official_fullname':
             return '';
           break;
        };
      }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路