【问题标题】:Access Class Method with Php Closure properway使用 PHP Closure 正确的访问类方法
【发布时间】:2021-11-16 09:40:07
【问题描述】:
Class Layout 
{
         
     public function menu()
     {
       Foo::create('topMenu',function($menu){
           $menu->logo($logolink);
           $menu->color('blue');
       });

     }


}


Class Foo 
{
    public static function create(string $menu, Closure $callback)
    {
      
    }
}


Class Menu
{

  public function logo(string $logo){}

  public function color(string $color){}

}

如何使用匿名函数访问 Foo::create 方法内的 Menu 类的成员方法? $menu 作为菜单类的对象.. Core Php 中简单有效的方法。

已编辑: 我已经尝试过

 public static function create(string $menu, Closure $callback)
    {
       return $callback(new Menu);
       // or return reflection of closure 
       // $callback->call(new Builder,$menu);
       // and then return..
    }

但是如果不从 Foo::create 返回对象,它就不起作用 目前在职

Foo::create('topMenu',function($menu){
           $menu->logo($logolink);
           $menu->color('blue');
           return $menu;
       });

但需要..只有不返回 $menu

       Foo::create('topMenu',function($menu){
           $menu->logo($logolink);
           $menu->color('blue');
       });

或者喜欢...

Foo::create('topMenu',function(Menu $menu){
           $menu->logo($logolink);
           $menu->color('blue');
       });

虽然我使用函数 (Menu $menu){} 我的 IDE 正常工作,但如果使用函数 ($menu){} 我的 IDE 无法在 Foo::crete() 中显示 $menu 中的 $methods;

我认为 IDE 问题只针对我这边,你这边也一样吗? phpstrom 2021.2.2

【问题讨论】:

  • 啊,解决了,有些插件会导致这个..

标签: php closures


【解决方案1】:
class Layout 
{
     public function menu()
     {
        // Here we print output for example:
        var_dump(Foo::create('topMenu', function($menu) {
           $menu->logo('link');
           $menu->color('blue');
           return $menu;
        }));
     }
}

class Foo 
{
    public static function create(string $menu, Closure $callback)
    {
        // Here we create new object of Menu class:
        return $callback(new Menu);
    }
}

class Menu
{

    public function logo(string $logo) {
        $this->logo = $logo;
    }

    public function color(string $color) {
        $this->color =  $color;
    }

}

// Run:
$layout = new Layout;
$layout->menu();

在这里你可以看到例子:http://sandbox.onlinephpfunctions.com/code/1c866c17c607433bd91800facc1a948841cdf6eb

【讨论】:

  • 我已经这样做了,但是我的 phpstrom 没有自动显示方法名称,就像它向我们展示其他实例一样。知道为什么它不友好.. $menu->color();无论如何你的回答是正确的,我接受你的回答。
  • 嗨@AloneCoder,您似乎还没有接受答案。您需要单击复选标记才能接受答案
猜你喜欢
  • 2019-02-11
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2012-05-28
  • 1970-01-01
相关资源
最近更新 更多