Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用匿名函数初始化类属性_Php - Fatal编程技术网

Php 使用匿名函数初始化类属性

Php 使用匿名函数初始化类属性,php,Php,为什么在php中声明属性时无法将属性初始化为函数?以下snippit导致分析错误:语法错误、意外的T_函数 <?php class AssignAnonFunction { private $someFunc = function() { echo "Will Not work"; }; } ?> 但是您可以将属性初始化为字符串、数字或其他数据类型 编辑: 但是我可以在uu construct()方法中将函数分配给属性。以下方法确实有效: &

为什么在php中声明属性时无法将属性初始化为函数?以下snippit导致分析错误:语法错误、意外的T_函数

<?php
  class AssignAnonFunction {
    private $someFunc = function() {
      echo "Will Not work";
    };
  }
?>

但是您可以将属性初始化为字符串、数字或其他数据类型

编辑:

但是我可以在uu construct()方法中将函数分配给属性。以下方法确实有效:

<?php
  class AssignAnonFunctionInConstructor {
    private $someFunc;

    public function __construct() {
      $this->someFunc = function() {
        echo "Does Work";
      };
    }
  }
?>

,因为它不是用PHP实现的

。引述:

它们(属性)是通过使用 关键词公共、受保护或 private,后跟一个正常变量 宣言。本声明可以 包括一个初始化,但是 初始化必须是常量 值——也就是说,它必须能够 在编译时计算,并且不能 依赖于中的运行时信息 要评估的订单

不能像这样初始化属性,函数不是常量值。因此,我最初的答案是“没有实施”


为何不实施?我只能猜测——这可能是一项相当复杂的任务,而且还没有人来实施它。和/或对这样的功能可能没有足够的需求。

在PHP 5.3(最新版本)之前,闭包在PHP中不存在。如果您想这样做,请确保您有PHP5.3

在早期版本中,可以使用create_function()函数复制此功能,有点像这样:

$someFunc = create_function($args,$code);
$someFunc();

其中,$args是一个格式类似“$x、$y、$z”的字符串,$code是PHP代码的字符串。

没有帮助或信息;为什么没有实现它的背景是什么?批评是当之无愧的,我改变了答案,让它有更多的细节。这在PHP5.3中。我已经用一个在PHP5.6中有效的例子更新了我的问题(我可以在_构造魔术方法中为属性分配一个函数)。OP中的语法不起作用,create_function()不是一回事