익명 함수(익명 함수)는 클로저라고도 불리며 지정된 이름 없이 일시적으로 함수를 생성할 수 있게 해줍니다. 콜백 함수(콜백) 매개변수의 값으로 가장 자주 사용됩니다. 물론 다른 응용 프로그램도 있습니다.
예제 #1 익명 함수 예
<?php echo preg_replace_callback ( '~-([a-z])~' , function ( $match ) { return strtoupper ( $match [ 1 ]); }, 'hello-world' ); // 输出 helloWorld ?>
클로저 함수는 변수의 값으로도 사용할 수 있습니다. PHP는 자동으로 이 expression을 내장 클래스 Closure의 객체 인스턴스로 변환합니다. 클로저 객체를 변수에 할당하는 방법은 일반 변수 할당 구문과 동일하며 끝에 세미콜론을 추가해야 합니다.
Example #2 익명 함수 변수 할당의 예
<?php $greet = function( $name ) { printf ( "Hello %s\r\n" , $name ); }; $greet ( 'World' ); $greet ( 'PHP' ); ?>
클로저는 다음에서 상속될 수 있습니다. 상위 범위 변수. 이러한 변수는 사용 언어 구성을 사용하여 전달되어야 합니다.
예제 #3 상위 범위에서 변수 상속
<?php $message = 'hello' ; // 没有 "use" $example = function () { var_dump ( $message ); }; echo $example (); // 继承 $message $example = function () use ( $message ) { var_dump ( $message ); }; echo $example (); // Inherited variable's value is from when the function // is defined, not when called $message = 'world' ; echo $example (); // Reset message $message = 'hello' ; // Inherit by-reference $example = function () use (& $message ) { var_dump ( $message ); }; echo $example (); // The changed value in the parent scope // is reflected inside the function call $message = 'world' ; echo $example (); // Closures can also accept regular arguments $example = function ( $arg ) use ( $message ) { var_dump ( $arg . ' ' . $message ); }; $example ( "hello" ); ?>
위 루틴의 출력은 다음과 유사합니다.
Notice: Undefined variable: message in /example.php on line 6 NULL string(5) "hello" string(5) "hello" string(5) "hello" string(5) "world" string(11) "hello world"
이러한 변수는 함수 또는 클래스의 선두에서 선언되어야 합니다. 상위 범위에서 변수를 상속하는 것은 전역 변수를 사용하는 것과 다릅니다. 전역 변수는 현재 실행 중인 함수에 관계없이 전역 범위에 존재합니다. 클로저의 상위 범위는 클로저를 정의하는 함수입니다(반드시 이를 호출하는 함수일 필요는 없음). 예는 다음과 같습니다:
예제 #4 클로저 및 범위
<?php // 一个基本的购物车,包括一些已经添加的商品和每种商品的数量。 // 其中有一个方法用来计算购物车中所有商品的总价格,该方法使 // 用了一个 closure 作为回调函数。 class Cart { const PRICE_BUTTER = 1.00 ; const PRICE_MILK = 3.00 ; const PRICE_EGGS = 6.95 ; protected $products = array(); public function add ( $product , $quantity ) { $this -> products [ $product ] = $quantity ; } public function getQuantity ( $product ) { return isset( $this -> products [ $product ]) ? $this -> products [ $product ] : FALSE ; } public function getTotal ( $tax ) { $total = 0.00 ; $callback = function ( $quantity , $product ) use ( $tax , & $total ) { $pricePerItem = constant ( CLASS . "::PRICE_" . strtoupper ( $product )); $total += ( $pricePerItem * $quantity ) * ( $tax + 1.0 ); }; array_walk ( $this -> products , $callback ); return round ( $total , 2 );; } } $my_cart = new Cart ; // 往购物车里添加条目 $my_cart -> add ( 'butter' , 1 ); $my_cart -> add ( 'milk' , 3 ); $my_cart -> add ( 'eggs' , 6 ); // 打出出总价格,其中有 5% 的销售税. print $my_cart -> getTotal ( 0.05 ) . "\n" ; // 最后结果是 54.29 ?>
익명 함수는 현재 Closure 클래스를 통해 구현됩니다.
Version Description
5.4.0 $this는 익명 기능에 사용할 수 있습니다.
5.3.0 익명 기능을 사용할 수 있습니다.
위 내용은 PHP 익명 함수의 일부 사용 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!