当前位置: 首页 > 面试题库 >

用匿名函数初始化类属性

柯凯旋
2023-03-14
问题内容

在php中声明属性时,为什么无法将属性初始化为函数?以下代码片段导致 解析错误:语法错误,意外的T_FUNCTION

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

您还可以将属性初始化为字符串,数字或其他数据类型吗?

编辑:

但是我可以在__construct()方法中将函数分配给属性。以下工作正常:

<?php
  class AssignAnonFunctionInConstructor {
    private $someFunc;

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

问题答案:

因为它不是用PHP实现的。

http://www.php.net/manual/zh/language.oop5.properties.php。引用:

它们(属性)是使用关键字public,protected或private之一定义的,后跟普通变量声明。该声明可以包括一个初始化,但是此初始化必须是一个常量值-
也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。

您不能像这样初始化属性,函数不是常量值。因此,我的原始答案是“未实现”。

为什么不执行?我只能猜测-这可能是一项非常复杂的任务,没有人加紧实施。和/或可能对这样的功能没有足够的需求。



 类似资料:
  • 本文向大家介绍WordPress add_action-初始化-匿名函数,包括了WordPress add_action-初始化-匿名函数的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 有什么方法可以初始化Java中的匿名内部类吗? 例如: 有没有办法在类声明中的某处使用例如putValue方法? 问题答案: 使用初始化程序块: 初始化实例成员 通常,您需要将代码放在构造函数中以初始化实例变量。使用构造函数初始化实例变量有两种选择:初始化块和final方法。实例变量的初始化块看起来像静态初始化块,但没有static关键字: Java编译器将初始化程序块复制到每个构造函

  • 1、什么是初始化函数 初始化函数的意思是,当你创建一个实例的时候,这个函数就会被调用。 比如: 当代码在执行 a = ClassA() 的语句时,就自动调用了 __init__(self) 函数。 而这个 __init__(self) 函数就是初始化函数,也叫构造函数。 初始化函数的写法是固定的格式:中间是 init,意思是初始化,然后前后都要有【两个下划线】,然后 __init__() 的括号中

  • 问题内容: 我有一个json作为 我想将我的结构编组到json之上并创建如下结构- 我在初始化上述结构时遇到麻烦。我不确定如何以以下方式初始化匿名结构: 我通过为页面信息创建一个单独的结构并将其与父结构附加在一起来解决此问题。但是,必须有某种方法来执行 匿名 嵌套结构的初始化,就像我对上面的 Fields (字符串切片)所做的一样。谁能将我重定向到一些指南来做到这一点? 问题答案: 这可行,但是很

  • 问题内容: 这个 自我回答的问题是由于变量“snackbar”可能尚未初始化而引起的。我认为还有更多细节,最好与该特定问题分开添加。 为什么以下代码无法编译? 编译错误: 问题答案: 发生这种情况的原因是实现匿名类的方式。如果对代码稍作更改然后反编译,则可以看到以下内容: 即,使匿名类引用不同的局部变量。现在可以编译了;我们可以使用进行反编译并查看匿名类的接口: (是Java内部引用匿名类的名称)

  • 5.6. 匿名函数 拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似,区别在于func关键字后没有函数名。函数值字面量是一种表达式,它的值被成为匿名函数(anonymous function)。 函数字面量允许我们在使用函数时,再定义它。通过这种技巧,我们可以改写之前对st