中生代技术&iTechPlus年度大会 ppt分享

黄慧攀-商业技术与纯技

黄勇-优秀工程师的10个习惯

焦烈焱-数字化经济下技术领导者的洞察创新之路

黄步添-区块链-信任的机器

张新波-十面埋伏-论大数据风控技术体系的构建

郭炜-如何打造高性价比百亿级实时数据分析平台

蒋步星-关系代数和数据库的问题与展望

李智慧-Spark源码性能优化

李彦辉-电商路上曾经踩过的技术“坑

王庆友-应用架构与时俱进

吴其敏-分布式实时监控系统CAT

陈达孚-基于React Native的三端融合实践

耿万鹏-饿了么Android端APM演进

宁栗-Weex 业务支撑与双十一实践

苏震巍-高并发场景下的微信公众号小程序架构及开发

杜亚明-容器技术在百度金融的实施经验

李林峰-微服务故障隔离技术

杨波-微服务架构和技术体系

Visual Studio Enterprise 2017密钥

NJVYC-BMHX2-G77MM-4XJMR-6Q8QF
附上下载链接。
Visual Studio Enterprise 2017 RC (x86 and x64) – (Multiple Languages)
ed2k://|file|mu_visual_studio_enterprise_2017_rc_x86_x64_9574850.exe|857632|9F98F7E32864AAED54B28102D72DF9E6|/

Visual Studio Professional 2017 RC (x86 and x64) – (Multiple Languages)
ed2k://|file|mu_visual_studio_professional_2017_rc_x86_x64_9574850.exe|857640|B4018433BC22E356799C274D07836C4C|/

还有两个team foundation server
Team Foundation Server 2017 (x64) – DVD (Chinese-Simplified)
ed2k://|file|cn_team_foundation_server_2017_x64_dvd_9579582.iso|380022784|EA60BA22CC1F6581D11D4547BDF2F0B8|/

Team Foundation Server Express 2017 (x64) – DVD (Chinese-Simplified)
ed2k://|file|cn_team_foundation_server_express_2017_x64_dvd_9579609.iso|380022784|2851CF25C81B4531495C6F0BD7A03599|/

php闭包

php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。

闭包的语法很简单,需要注意的关键字就只有use,use意思是连接闭包和外界变量。

1
2
3
$a = function() use($b) {
}

闭包的几个作用:

1 减少foreach的循环的代码

比如手册http://php.net/manual/en/functions.anonymous.php 中的例子Cart

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
<?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";
// The result is 54.29
?>

 

这里如果我们改造getTotal函数必然要使用到foreach

2 减少函数的参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function html ($code , $id="", $class=""){
if ($id !== "") $id = " id = \"$id\"" ;
$class = ($class !== "")? " class =\"$class\"":">";
$open = "<$code$id$class";
$close = "</$code>";
return function ($inner = "") use ($open, $close){
return "$open$inner$close";};
}
如果是使用平时的方法,我们会把inner放到html函数参数中,这样不管是代码阅读还是使用都不如使用闭包

3 解除递归函数

1
2
3
4
5
6
7
8
9
10
<?php
    $fib = function($n) use(&$fib) {
        if($n == 0 || $n == 1) return 1;
        return $fib($n - 1) + $fib($n - 2);
    };
   echo $fib(2) . "\n"; // 2
   $lie = $fib;
   $fib = function(){die('error');};//rewrite $fib variable
   echo $lie(5); // error   because $fib is referenced by closure

 

注意上题中的use使用了&,这里不使用&会出现错误fib(fib(n-1)是找不到function的(前面没有定义fib的类型)

所以想使用闭包解除循环函数的时候就需要使用

1
2
3
4
<?php
$recursive = function () use (&$recursive){
// The function is now available as $recursive
}

这样的形式

 

4 关于延迟绑定

如果你需要延迟绑定use里面的变量,你就需要使用引用,否则在定义的时候就会做一份拷贝放到use中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$result = 0;
$one = function()
{ var_dump($result); };
$two = function() use ($result)
{ var_dump($result); };
$three = function() use (&$result)
{ var_dump($result); };
$result++;
$one();    // outputs NULL: $result is not in scope
$two();    // outputs int(0): $result was copied
$three();    // outputs int(1)