前言

归功于php相对宽松的语法特性,可以说每个phper都有着自己与他人完全不同的代码风格。同样写代码如何在实现功能的同时又能不失优雅的拉高自身的逼格,当然这也得按照代码规范的基本法,以下就分享音风编码这几年在php方面的一些代码技巧,希望能对你姿势水平的提升有所帮助~

技巧

1. 妙用“逻辑短路”,精炼代码。

<?php 
    // 优化前 
    $round++; 
    if($round % 1000){
        sleep(1);
    }
    // 优化后 
    (++$round) && $round % 1000 || sleep(1); 
?>

2. 尽量避免 if 多重嵌套。

<?php
    // 优化前 if 多重嵌套
    if(isset($map[$row['apid']])){
        // if...more
        if($workflow_writer->query($sql)){
            exit('wtf? update workflow_event error!');
        }
    }
    // 优化后
    if(!isset($map[$row['apid']])){
        // handling...
        return
    }
    if($workflow_writer->query($sql)){
        exit('wtf? update workflow_event error!');
    }
    // 究极优化...
    $map[$row['apid']] && !$workflow_writer->query($sql) && exit('wtf update workflow_event error!');
?>

3. 避免产生超大数组,擅用yield实现迭代器,节省大量内存

<?php
    // 优化前
    function get_bigger_array($nums){
        $arr = [];
        for($i=0;$i<$nums;$i++){
            $arr[] = $i; 
        }
        return $arr;
    }
    echo 'memory used: '.memory_get_usage().PHP_EOL;
    $data = get_bigger_array(10000000);
    echo 'memory used: '.memory_get_usage().PHP_EOL;
    // 优化后
    function get_bigger_array_yield($nums){
        for($i=0;$i<$nums;$i++){
            yield $i; 
        }
    }
    echo 'memory used: '.memory_get_usage().PHP_EOL;
    $data = get_bigger_array_yield(10000000);
    echo 'memory used: '.memory_get_usage().PHP_EOL;
    var_dump($data->current());

風前の灯になってもいいさ、残したの歳月痕跡を持ち続けて生きてゆく。