代码之家  ›  专栏  ›  技术社区  ›  Fred Willmore

是否可以使用类方法作为array\u map的可调用参数?[副本]

  •  1
  • Fred Willmore  · 技术社区  · 7 年前

    我使用的是php 5.6,我想这样做:

    class FooBar {
      public function foo() {
        echo "foo!";
        array_map($this->bar, [1,2,3]);
      }
    
      private function bar() {
        echo "bar!";
      }
    }
    (new FooBar)->foo();
    

    这会产生以下错误:

    注意:未定义的属性:FooBar::$bar

    或者,是否可以将匿名函数声明为类属性?类似这样:

    class FooBar {
      private $bar = function() {
        echo "bar!";
      }
    
      public function foo() {
        echo "foo!";
        array_map($this->bar, [1,2,3]);
      }
    }
    (new FooBar)->foo();
    

    这给了我以下错误:

    分析错误:语法错误,意外的“函数”(T\U函数)

    我可以通过以下方式获得我想要的结果:

    class FooBar {
      function __construct() {
          $this->bar = function() {
            echo "bar!";
          };
      }
    
      private $bar;
    
      public function foo() {
        echo "foo!";
        array_map($this->bar, [1,2,3]);
      }
    }
    (new FooBar)->foo();
    

    然而,这并不理想;我认为这些函数定义不属于构造函数——理想情况下,我希望它们是静态类方法。

    1 回复  |  直到 7 年前
        1
  •  2
  •   iwex    7 年前

    您应该为函数指定上下文:

    class FooBar {
      public function foo() {
        echo "foo!";
        array_map([$this, 'bar'], [1,2,3]);
      }
    
      private function bar() {
        echo "bar!";
      }
    }
    (new FooBar)->foo();
    

    有关更多详细信息,请查看 http://php.net/manual/en/language.types.callable.php

    推荐文章