[PHP 시리즈 강화] 장바구니 코드 설명 PHP 익명 함수
1. 정의: 클로저라고도 불리는 익명 함수(익명 함수)는 불특정 이름 함수의 임시 생성을 허용합니다. 콜백 함수 인수로 가장 일반적으로 사용되는 값입니다. 물론 다른 응용 프로그램도 있습니다.
2. 사용법:
1) 변수의 값으로:
클로저 함수도 변수의 값으로 사용할 수 있습니다. PHP는 자동으로 이 표현식을 내장 클래스 Closure의 객체 인스턴스로 변환합니다. 클로저 객체를 변수에 할당하는 방법은 일반 변수 할당 구문과 동일하며 끝에 세미콜론을 추가해야 합니다
2) 상위 범위에서 변수 상속:
클로저 변수는 상위 범위에서 상속될 수 있습니다. 이러한 변수는 사용 언어 구성을 사용하여 전달되어야 합니다.
3) 장바구니 코드로 표현된 전체 예:
<?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 ?>
3. 참조:
1) PHP 공식 설명 'Anonymous function': http://www.php.net/manual/zh/functions.anonymous.php
2) Constant() 함수는 상수 값을 반환합니다: http://www.runoob com/. php/func-misc-constant.html
3) array_walk() 함수는 배열의 각 요소에 사용자 정의 함수를 적용합니다: http://www.w3school.com.cn/php/func_array_walk. asp
4) round() 함수는 부동 소수점 숫자를 반올림합니다: http://www.w3school.com.cn/php/func_math_round.asp