今天在学习Lambdas和Closure(即:匿名函数和闭包)时,看到这个获取常数的函数,查了查PHP手册关于这个函数的定义:
constant()
: 获取一个常量值;
mixed constant ( string $name )
通过 name 返回常量的值。
当你不知道常量名,却需要获取常量的值时,constant() 就很有用了。也就是常量名储存在一个变量里,或者由函数返回常量名。
突然就有点懵逼~~~ 😂 直接输出变量就行了,为什么还有用函数?这个函数存在的意义是什么?
有点懵逼
当你不知道常量名,却需要获取常量的值时,constant() 就很有用了。也就是常量名储存在一个变量里,或者由函数返回常量名。
懵逼的是:你都不知道常量名,还怎么获取常量值?这不符合我的思维逻辑啊?
仔细读了读中文手册的说明和下面的范例,还是没有弄懂这个函数存在的意义,又对着英文手册学习了一下,才发现这个函数的意义在这句话:
当你不知道常量名,却需要获取常量的值时,constant() 就很有用了。也就是常量名储存在一个变量里,或者由函数返回常量名。
理解重述
重点是后面的那句话,中文手册这里的叙述有些模糊,我尝试以我的理解重述一下:
当你要获取的这个常量不是确定的,而是取决于程序运行的情景时,constant()就很有用,也就是常量名不是你写程序时能确定,而是在程序执行过程中得到的一个已知的常量名,constant()函数就可以获取这个常量值,通常这个常量名储存在一个变量里,或者由函数返回常量名,只要是一个存在的常量名字符串就行
下面给出引出这个问题的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| 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);
print $my_cart->getTotal(0.05) . "\n";
|