访问 Class 方法并 Php 关闭正确

Access Class Method with Php Closure properway

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){}

}

如何使用annonymus 函数访问Class 内部Foo::create 方法的成员方法? $menu 作为菜单的对象 Class.. 核心 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..
    }

但如果不是 returning 来自 Foo::create 的对象,它就不起作用 目前工作

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

但需要..只有没有 return $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 无法从 $menu 中显示 $methods inside Foo::crete();

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

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