Can I define a variable in a PHP if condition?

前端 未结 5 2242
失恋的感觉
失恋的感觉 2020-12-05 23:17

For example, can I do:

if ($my_array = wp_get_category($id)) {
    echo \"asdf\";
} else {
    echo \"1234\";
}

If nothing is returned by t

相关标签:
5条回答
  • This is in fact a common pattern and will work. However, you may want to think twice about using it for more complex cases, or at all. Imagine if someone maintaining your code comes along and sees

    if ($x = one() || $y = two() && $z = three() or four()) {
    
    }
    

    It might be better to declare the variables before using them in the conditional.

    0 讨论(0)
  • 2020-12-05 23:47

    I found this wondering about the rules of declaring a variable then using it immediately in subsequent conditions in the same statement.

    Thanks to previous answer for the codepad link, I made my own to test the theory. Spoiler alert: It works.

    http://codepad.org/xTwzTwGR

    0 讨论(0)
  • 2020-12-05 23:48

    Following is one more alternative to define any variable (with safety):

    $my_array = ($my_array = $wp_get_category($id)) ?: /* else statement here */;
    
    0 讨论(0)
  • 2020-12-05 23:53

    Yes, that will work, and the pattern is used quite often.

    If $my_array is assigned a truthy value, then the condition will be met.

    CodePad.

    <?php
    
    function wp_get_category($id) {
       return 'I am truthy!';
    }
    
    if ($my_array = wp_get_category($id)) {
        echo $my_array;
    } else {
        echo "1234";
    }
    

    The inverse is also true...

    If nothing is returned by the function, I want to go into the else statement.

    A function that doesn't return anything will return NULL, which is falsey.

    CodePad.

    <?php
    
    function wp_get_category($id) {
    }
    
    if ($my_array = wp_get_category($id)) {
        echo $my_array;
    } else {
        echo "1234";
    }
    
    0 讨论(0)
  • 2020-12-05 23:53

    you might want something like this:

    if (!is_null($my_array = wp_get_category($id)) {
        echo "asdf";
    else
        echo "1234";
    

    Assuming the function returns null upon failure. You may have to adjust it a bit.

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