【问题标题】:How do I make a method of a class a closure in php?如何在php中使类的方法成为闭包?
【发布时间】:2020-03-11 06:37:40
【问题描述】:
<?php

class Container
{
    public $say = 'hi';
}

class Loader
{
    public function callSay()
    {
        echo $this->say;
    }
}

$container = new Container;
$run1 = function () {
    echo $this->say;
};
$run1->call($container); //hi

$loader = new Loader;
$run2 = function () use ($loader) {
    $loader->callSay();
};
$run2->call($container); //Undefined property: Loader::$say

我尝试将 $loader->callSay() 变成一个闭包并将其应用到 $container 但它不起作用。

如何将类中的方法设为闭包,然后将其绑定到另一个类?

【问题讨论】:

  • 好吧,加载器中没有 say 成员,除非你想在那里扩展容器,否则它会起作用
  • 如果您碰巧不想扩展加载器,则另一种方法是在加载器内实例化容器
  • 我认为这是另一回事。提供的职位适用于同一班级。这是不同类之间的应用。 $closure = Closure::fromCallable($run2); $run2->call($container);还是不行……
  • 这能回答你的问题吗? PHP binding method to another class

标签: php closures call


【解决方案1】:

Loader 类的 callSay 方法想要访问 say 属性。属性说不存在。 最简单的方法是创建此属性并用您的值填充它。

$run2 = function() use ($loader) {
  $loader->say = $this->say;  
  $loader->callSay();
};

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 2018-07-20
    • 2021-06-05
    • 2016-11-29
    • 2020-05-23
    • 1970-01-01
    • 2011-02-22
    • 2011-04-08
    相关资源
    最近更新 更多