有没有办法在PHP类中将箭头函数用作属性?

huangapple go评论84阅读模式
英文:

Is there any way to use arrow function as a property of a class in php?

问题

I have created a class named calculator where I have set an arrow function as the property of the class. And I have passed that property to the init method. Once I run this program, It is not generated output. My expected output is 15. The code is below.

我已经创建了一个名为calculator的类,在这个类中,我将一个箭头函数设置为类的属性,并将该属性传递给了init方法。一旦运行这个程序,它没有生成输出。我期望的输出是15。以下是代码。

  1. <?php
  2. namespace Calculate;
  3. class calculator{
  4. public $sum = fn(...$args) => array_sum($args);
  5. public function init(){
  6. return $this->sum(5, 10);
  7. }
  8. }
  9. $cal = new calculator();
  10. print $cal->init(); // 期望的输出是15

But on the other hand, when I am putting the sum variable outside of the class and using it from the init method, It is working then. And it's providing the output 15. The code is below.

但另一方面,当我将sum变量放在类外部并在init方法中使用它时,它就可以正常工作了。并且它提供了输出为15的结果。以下是代码。

  1. $sum = fn(...$args) => array_sum($args);
  2. class calculator{
  3. public function init(){
  4. global $sum;
  5. return $sum(5, 10);
  6. }
  7. }
  8. $cal = new calculator();
  9. print $cal->init(); // 输出是15

So, my question is can not I declare the arrow function as property or method of a class? If we can, what is the process, please?

所以,我的问题是我不能将箭头函数声明为类的属性或方法吗?如果可以的话,请问是什么过程?

英文:

I have created a class named calculator where I have set an arrow function as the property of the class. And I have passed that property to the init method. Once I run this program, It is not generated output. My expected output is 15. The code is below.

  1. <?php
  2. namespace Calculate;
  3. class calculator{
  4. public $sum = fn(...$args) => array_sum($args);
  5. public function init(){
  6. return $this->sum(5, 10);
  7. }
  8. }
  9. $cal = new calculator();
  10. print $cal->init(); // Expected Output is 15

But on the other hand, when I am putting the sum variable outside of the class and using it from the init method, It is working then. And it's providing the output 15. The code is below.

  1. $sum = fn(...$args) => array_sum($args);
  2. class calculator{
  3. public function init(){
  4. global $sum;
  5. return $sum(5, 10);
  6. }
  7. }
  8. $cal = new calculator();
  9. print $cal->init(); // Output is 15

So, my question is can not I declare the arrow function as property or method of a class? If we can, what is the process, please?

答案1

得分: 2

First, the arrow function should be assigned to a variable, not a class property. Arrow functions in PHP cannot be directly assigned as class properties. Instead, you can define a regular method that uses the arrow function internally. Here's an updated version of the code:

  1. namespace Calculate;
  2. class Calculator {
  3. private $sum;
  4. public function __construct() {
  5. $this->sum = fn(...$args) => array_sum($args);
  6. }
  7. public function init() {
  8. return ($this->sum)(5, 10);
  9. }
  10. }
  11. $cal = new Calculator();
  12. echo $cal->init(); // Output: 15

Now, when you run the code, it will correctly output 15, which is the expected result.

英文:

First, the arrow function should be assigned to a variable, not a class property. Arrow functions in PHP cannot be directly assigned as class properties. Instead, you can define a regular method that uses the arrow function internally. Here's an updated version of the code:

  1. namespace Calculate;
  2. class Calculator {
  3. private $sum;
  4. public function __construct() {
  5. $this->sum = fn(...$args) => array_sum($args);
  6. }
  7. public function init() {
  8. return ($this->sum)(5, 10);
  9. }
  10. }
  11. $cal = new Calculator();
  12. echo $cal->init(); // Output: 15

Now, when you run the code, it will correctly output 15, which is the expected result.

huangapple
  • 本文由 发表于 2023年7月4日 20:14:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/76612499.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定