Ternary Operators. Possible for a one sided action?
Asked Answered
D

4

18

I've used ternary operators for a while and was wondering if there was a method to let say call a function without the else clause. Example:

if (isset($foo)) {
    callFunction();
} else {

}

Now obviously we can leave out the else to make:

if (isset($foo)) {
    callFunction();
}

Now for a ternary How can you 'by pass' the else clause if the condition returns false?

isset($foo) ? callFunction() : 'do nothing!!';

Either a mystery or not possible?

Disseise answered 25/1, 2013 at 11:31 Comment(0)
S
37

Short-circuit

isset($foo) and callFunction();

Reverse the condition and omit the second argument

!isset($foo) ?: callFunction();

or return just "something"

isset($foo) ? callFunction() : null;

However, the ternary operators is designed to conditionally fetch a value out of two possible values. You are calling a function, thus it seems you are really looking for if and misuse ?: to save characters?

if (isset($foo)) callFunction();
Somnifacient answered 25/1, 2013 at 11:35 Comment(0)
O
1

Why would you use a ternary operator in this case? The ternary operator is meant to be used when there are two possible scenarios and doesn't make much sense in the case where you only care about the if case. If you have to do it however, simply leave the case empty: (cond)?do_something():;

Onwards answered 25/1, 2013 at 11:33 Comment(3)
Well the above is an example. I was just wondering for bigger operations.Disseise
@Beneto Bigger operations? It really seems, that you misuse the ternary operator :XSomnifacient
You can't simply leave the else case empty in ternary operator ... you need to at least give it an empty value like '' or null, you can only leave out the "if true" part like !cond?:do_something() but not the other way around...Orosco
B
0

Put zero after colon. Also, assuming you're on Perl, you may use better 'condition and action()', 'action() if condition' idioms.

Boatyard answered 25/1, 2013 at 11:38 Comment(1)
Regarding the tags he uses PHP ;) however, the short-cicruiting of expression works in PHP too $condition and action();, but not the other notation. Here you can at least omit the braces, but thats all if ($condition) action();Somnifacient
S
0
$foo = 'bar'

You can do like this:

($foo) ?? dump("test");

the "($user)" is a condition, the "??" return the value of the if condition in negative condition.

In positive condition, execute the function dump.

dump('test'); // test

so, negative condition it's like do this:

// do nothing
$foo; // bar
Soy answered 19/7, 2024 at 19:17 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.