Overview of PHP shorthand

后端 未结 9 1222
小鲜肉
小鲜肉 2020-12-12 15:32

I\'ve been programming in PHP for years now, but I\'ve never learned how to use any shorthand. I come across it from time to time in code and have a hard time reading it, s

相关标签:
9条回答
  • 2020-12-12 15:36

    One of my favorite "tricks" in PHP is to use the array union operator when dealing with situations such as functions that take an array of arguments, falling back on default values.

    For example, consider the following function that accepts an array as an argument, and needs to know that the keys 'color', 'shape', and 'size' are set. But maybe the user doesn't always know what these will be, so you want to provide them with some defaults.

    On a first attempt, one might try something like this:

    function get_thing(array $thing)
    {
        if (!isset($thing['color'])) {
            $thing['color'] = 'red';
        }
        if (!isset($thing['shape'])) {
            $thing['shape'] = 'circle';
        }
        if (!isset($thing['size'])) {
            $thing['size'] = 'big';
        }
        echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}";
    }
    

    However, using the array union operator can be a good "shorthand" to make this cleaner. Consider the following function. It has the exact same behavior as the first, but is more clear:

    function get_thing_2(array $thing)
    {
        $defaults = array(
            'color' => 'red',
            'shape' => 'circle',
            'size'  => 'big',
        );
        $thing += $defaults;
        echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}";
    }    
    

    Another fun thing is anonymous functions, (and closures, introduced in PHP 5.3). For example, to multiple every element of an array by two, you could just do the following:

    array_walk($array, function($v) { return $v * 2; });
    
    0 讨论(0)
  • 2020-12-12 15:37

    Here are some of the shorthand operators used in PHP.

    //If $y > 10, $x will say 'foo', else it'll say 'bar'
    $x = ($y > 10) ? 'foo' : 'bar';
    
    //Short way of saying <? print $foo;?>, useful in HTML templates
    <?=$foo?>
    
    //Shorthand way of doing the for loop, useful in html templates
    for ($x=1; $x < 100; $x++):
       //Do something
    end for;
    
    //Shorthand way of the foreach loop
    foreach ($array as $key=>$value):
       //Do something;
    endforeach;
    
    //Another way of If/else:
    if ($x > 10):
        doX();
        doY();
        doZ();
    else:
        doA();
        doB();
    endif;
    
    //You can also do an if statement without any brackets or colons if you only need to
    //execute one statement after your if:
    
    if ($x = 100)
       doX();
    $x = 1000;
    
    // PHP 5.4 introduced an array shorthand
    
    $a = [1, 2, 3, 4];
    $b = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
    
    0 讨论(0)
  • 2020-12-12 15:39

    Also new in PHP7 is the spaceship operator. Mostly useful in callbacks for things like usort().

    Before:

    usort($list, function ($a, $b) {
        if ($a == $b) return 0;
        return $a < $b;
    });
    

    After:

    usort($list, function ($a, $b) { return $a <=> $b; });
    

    Basically, it returns a negative integer, 0, or a positive integer based on the comparison of the left side with the right side.

    0 讨论(0)
  • 2020-12-12 15:44

    Nobody mentioned ??!

    // Example usage for: Null Coalesce Operator
    $action = $_POST['action'] ?? 'default';
    
    // The above is identical to this if/else statement
    if (isset($_POST['action'])) {
        $action = $_POST['action'];
    } else {
        $action = 'default';
    }
    
    0 讨论(0)
  • 2020-12-12 15:45

    PHP 5.3 introduced:

    $foo = $bar ?: $baz;
    

    which assigns the value of $bar to $foo if $bar evaluates to true (else $baz).

    You can also nest the ternary operator (with proper use of parenthesis).

    Other than that, there is not much else about it. You might want to read the documentation.

    0 讨论(0)
  • 2020-12-12 15:46
    <?php
    class Bob {
    
        public function isDebug(){
            return true;
        }
    
        public function debug(){
            echo 'yes dice!!!';
        }
    }
    
    
    $bob = new Bob(); 
    
    ($bob->isDebug()) && $bob->debug(); 
    

    Here is another version of shorthand. Hope this helps someone

    0 讨论(0)
提交回复
热议问题