php - If a switch matches multiple cases will all matching cases run?

149

I'm attempting to go through a large number bitwise tests, 32 to be exact, where there could be multiple matches. The only method I can think of that would work is to use a whole long list of if statements, e.g.

$test = 3;
if(($test & 1) == 1) {
    do something...
}
if(($test & 2) == 2) {
    do something else...
}

The other possibility I was thinking of to cut down on the code, although probably not by much is a switch statement. That said, I'm not even sure if what I am thinking of will even work:

$test = 3;
switch($test) {
    case ((1 & $test) == 1):
        do something...
        break;
    case ((2 & $test) == 2):
        //Will this run?
        do something else...
        break;
}

Will thebreak end the switch? Or will the switch continue and each case run that the bitwise operation returns true?

I ask because my actual program will have 32 different tests, and I don't want to write all 32 just to find it doesn't work and Google hasn't turned up anything on this.

If this doesn't work is there a solution that will, or am I relegated to a large number of if statements?

426

Answer

Solution:

No this is not the case. Only one of the switch cases will run in your example. As soon asbreak is encountered the switch processing ends. Only one branch will match. In PHP I think (but you might want to double check) the first matching case will run.

With multiple possible matches you will need to use a set ofif statements (note do not use if...elseif)

I would convert to

if($test & 1) {
    // do stuff
}

if(test & 2) {
    // do stuff
}
747

Answer

Solution:

Well first, using switch withint this way is not really recommended. It's not a good practice / not really readable / not comfortable. I would say it does not even work, although I have a doubt now... depending on versions and stuff, I'm not aware enough of these things.

Then, to answer your question, you only go inside the first matching case... then the break makes you leave the switch. However, you can omit the break and it will go through the second case.

Anyway, you should make more use of OOP to characterize better what you intend to do, and things will probably get more simple and clearer.

People are also looking for solutions to the problem: Hex to image in PHP

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.