40

For example, can I do:

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

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

6 Answers 6

63

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"; } 
Sign up to request clarification or add additional context in comments.

1 Comment

As important the variable is available outside of the scope of the if... codepad.org/Bog9U9kL
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.

Comments

5

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

3 Comments

Interesting that it doesn't work without enclosing the declaration.
The parentheses are necessary to keep everything to the right of the "=" from grouping together. php.net/manual/en/language.operators.assignment.php
Pay attention, that you must keep declaring a variable condition in parentheses to use it immediately in subsequent conditions.
4

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.

Comments

2

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

$my_array = ($my_array = $wp_get_category($id)) ?: /* else statement here */; 

Comments

0

I always found this principle confusing as it never seemed to work for me! Take the following code:

if ($pid = $arr['Key']){

This may throw an error Undefined index: Key. Equally I get the same result with this:

if (!empty($pid = $arr['Key']))

The solution now with PHP7+ is as follows:

if ($pid = $arr['Key'] ?? false)

Which will allow for an array with an empty value setting $pid = false; and not triggering the IF statement.

I hope that helps someone as arrays threw me but the double coalesc is super helpful and can be used in the if concept.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.