> 백엔드 개발 > PHP 문제 > PHP에서 익명 함수에 대해 이를 지정하는 방법

PHP에서 익명 함수에 대해 이를 지정하는 방법

autoload
풀어 주다: 2023-03-09 10:34:02
앞으로
2253명이 탐색했습니다.

PHP에서 익명 함수에 대해 이를 지정하는 방법

클로저 익명 함수와 관련하여 JS의 매우 일반적인 문제는 이를 this 범위에 바인딩하는 것입니다. 실제로 이 문제는 다음 코드와 같이 PHP에도 존재합니다. JS中有个很典型的问题就是要给它绑定一个 this 作用域。其实这个问题在PHP中也是存在的,比如下面这段代码:

$func = function($say){
    echo $this->name, ':', $say, PHP_EOL;
};
$func('good'); // Fatal error: Uncaught Error: Using $this when not in object context
로그인 후 복사

在这个匿名函数中,我们使用了 $this->name 来获取当前作用域下的 $name 属性,可是,这个 $this 是谁呢?我们并没有定义它,所以这里会直接报错。错误信息是:使用了 $this 但是没有对象上下文,也就是说没有指定 $this 引用的作用域。

1.bindTo() 方法绑定 $this

$func = $func->bindTo($lily, 'Lily');
// $func = $func->bindTo($lily, Lily::class);
// $func = $func->bindTo($lily, $lily);
$func1('cool');
로그인 후 복사

这回就可以正常输出了。 bindTo() 方法是复制一个当前的闭包对象,然后给它绑定 $this 作用域和类作用域。

  • $lily 参数是一个 object $newthis 参数,也就是给这个复制出来的匿名函数指定 $this

  • 'Lily' 则是绑定一个新的 类作用域 ,它代表一个类型、决定在这个匿名函数中能够调用哪些 私有 和 受保护 的方法

如果不给这个参数,那么我们就不能访问这个 private$name

$func1 = $func->bindTo($lily);
$func1('cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name
로그인 후 복사

이 익명 함수에서는 $this->name을 사용하여 < code>$name 속성이 현재 범위에 있는데 이 $this는 누구인가요? 정의하지 않았으므로 여기에 오류가 직접 보고됩니다. 오류 메시지는 다음과 같습니다. $this가 사용되었지만 개체 컨텍스트가 없습니다. 즉, $this 참조의 범위가 지정되지 않았습니다.

1.bindTo() 메소드 바인딩 $this

$func->call($lily, &#39;well&#39;); // Lily:well
로그인 후 복사
이번에는 정상적으로 출력이 가능합니다. bindTo() 메서드는 현재 클로저 객체를 복사한 다음 이를 $this 범위 및 클래스 범위에 바인딩합니다.

위 내용은 PHP에서 익명 함수에 대해 이를 지정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:imooc.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿