Cover image for post Goto for PHP: Heaven or hell?

Goto for PHP: Heaven or hell?

Reading all those mails from the past weeks, I stumbled over several dealing with a patch for PHP provided by Sara Goleman, which provides "goto" statements for PHP. There seem to be a lot of different opinions on that topic, in my eyes mainly depending on the code camp the specific person comes from. I wanna pick up some of the statements I found against goto and comment on them.

Goto is evil

I remember doing Basic, ages ago, which did not know things like procedures and function (not even thinking of OOP). Doing goto (based on the line numbers) was the only way to go. Yeah, that were my first experiences with programming. The code looked horrible and was almost unmaintanable... (think of renumbering the lines, when you wanna insert code). Then we started with Pascal in school and goto's were the evil on earth...

Can you see the problem, why goto has been considered evil? In my eyes, it's not goto itself, but the absence of any other possibillity. Imagine we've had functions these times, I guess that goto would have been used in a much other way.

Goto conflicts with the concept of OOP

True, goto conflicts with the conflict object object orientation in some way. Even true, PHP just invented a new OO model. Even more true PHP does follow the trend of OOP with that. But does goto really conflict with that happenings?

Not in my eyes. What I always loved in PHP was the possibility to choose how you would like to solve a problem. OOP is nice, but it's overhead in a huge bunch of cases. Functions are nice, but even they are overhead in some place (think of a simple shellscript). Having the choice of which approach to follow with the next project is a freedom I enjoy. Even better is the possibility too combine. So, where is the bad side of adding another technique of coding and give people the choice? Does one really think, that people will fall into Spagetthi code again these days, when having the possibility?

Switch has the same concept

True in some ways, but using a switch instead of goto looks a) really ugly and b) allows you just a single jump in PHP. The sense of switch is to react on a given value in one of several defined ways. Gotos allow you to jump between multiple marks more often.

Everything you can do with goto can be modeled by other constructs

This is no true. Some cases (e.g. issues in parsing and some nice looking error handling techniques) can not be modeled exactly as goto can do. Even if, the constructs for that are mostly more complex, ugly and unmainanable as the goto solution would have been.

In general I think Sara's patch cannot be bad at all. Giving the to the user looks pretty senseful in my eyes and the security restrictions for goto sound sensible for me:

  • No jumping between functioncs

  • No jumping into/out-of the global scope

  • No jumping from any code in one file to code in another file (even if it's global scope on both ends)

Although I don't understand the last point.

Anyway: Thanks to Sara for the cool patch and hope that goto will find it's way into PHP5.


The patch was bad, the idea was OK.

Derick Rethans at 2004-09-06

this idea is so stupid that I wonder how someone can even think of it being included.

What is goto needed for? to jump here and there in a function. Jump here and there? Do you mean you have functions so long that you have to jump here and there ? I really hope not.

I understand that there is so much crappy php code out there that people may feel the need for this, but the community should try to avoid this style of coding, not incourage it!

(no to mention that first class reified continuations are so much better than gotos, if manual control flow handling is needed)

verbat at 2004-09-24

The point is not, that goto is so much needed. But do you really _need_ variable variables ($$test)?

It's all about features and in some cases goto can be a very nice feature, so why not offer it?

Toby at 2004-09-24