Semua artikel yang menurut saya penting ada disini, jadi blog ini semacam tempat bookmark gitu, maaf buat para penulis yang artikelnya saya copas

Kamis, 26 Februari 2015

Maksud simbol "?:" di php

| No comment
Can someone please explain what the ? and : operators are in PHP? 

"Baca juga : Kumpulan arti simbol di php ? "

(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) 
This is the conditional operator.
$x ? $y : $z
means "if $x is true, then use $y; otherwise use $z".
People will tell you that ?: is "the ternary operator". This is wrong. ?: is a ternary operator, which means that it has three operands. People wind up thinking its name is "the ternary operator" because it's often the only ternary operator a given language has.

What is a ternary operator?
A ternary ? : is shorthand for if and else. That's basically it. See "Ternary Operators" half way down this page for more of an official explanation.
As of PHP 5.3:
Since PHP 5.3, it is possible to leave out the middle part of the ternary operator. Expression expr1 ?: expr3 returns expr1 if expr1 evaluates to TRUE, and expr3 otherwise.
How are ternaries used?
Here's how a normal if statement looks:
if (isset($_POST['hello']))
{
    $var = 'exists';
}
else
{
    $var = 'error';
}
Let's shorten that down into a ternary.
$var = isset($_POST['hello']) ? 'exists' : 'error';
                 ^            ^     ^    ^     |
                 |           then   |   else   |
                 |                  |          |
          if post isset         $var=this   $var=this
Much shorter, but maybe harder to read. Not only are they used for setting variables like $var in the previous example, but you can also do this with echo, and to check if a variable is false or not:
$isWinner = false;

// Outputs 'you lose'
echo ($isWinner) ? 'You win!' : 'You lose';

// Same goes for return
return ($isWinner) ? 'You win!' : 'You lose';
Why do people use them?
I think ternaries are sexy. Some developers like to show off, but sometimes ternaries just look nice in your code, especially when combined with other features like PHP 5.4's latest short echos.
<?php 
    $array = array(0 => 'orange', 1 => 'multicoloured'); 
?>

<div>
    <?php foreach ($array as $key => $value) { ?>
        <span><?=($value==='multicoloured')?'nonsense':'pointless'?></span>
    <?php } ?>
</div>

<!-- Outputs:
    <span>
        pointless
    </span>
    <span>
        nonsense
    </span> 
-->
Going off-topic slightly, when you're in a 'view/template' (if you're seperating your concerns through the MVC paradigm), you want as little server-side logic in there as possible. So, using ternaries and other short-hand code is sometimes the best way forward. By "other short-hand code", I mean:
if ($isWinner) :
    // Show something cool
endif;
Note, I personally do not like this kind of shorthand if / endif nonsense
How fast is the ternary operator?
People LIKE micro-optimisations. They just do. So for some, it's important to know how much faster things like ternaries are when compared with normal if / else statements.
Reading this post, the differences are about 0.5ms. That's a lot!
Oh wait, no it's not. It's only a lot if you're doing thousands upon thousands of them in a row, repeatedly. Which you won't be. So don't worry about speed optimisation at all, it's absolutely pointless here.
When not to use ternaries
Your code should be:
  • Easy to read
  • Easy to understand
  • Easy to modify
Obviously this is subject to the persons intelligence and coding knowledge / general level of understanding on such concepts when coming to look at your code. A single simple ternary like the previous examples are okay, something like the following, however, is not what you should be doing:
echo ($colour === 'red') ? "Omg we're going to die" :
     ($colour === 'blue' ? "Ah sunshine and daisies" :
     ($colour === 'green' ? "Trees are green"
     : "The bloody colour is orange, isn't it? That was pointless."));
That was pointless for three reasons:
  • Ridiculously long ternary embedding
  • Could've just used a switch statement
  • It was orange in the first place
Conclusion
Ternaries really are simple and nothing to get too worked up about. Don't consider any speed improvements, it really won't make a difference. Use them when they are simple and look nice, and always make sure your code will be readable by others in the future. If that means no ternaries, then don't use ternaries.

source 
Tags : ,

Tidak ada komentar:

Posting Komentar