Nov 10 2009

PHP: break a goto řídící stuktury

Tag: PHPJens @ 23:50

Zase jsem se dnes naučil něco nového o PHP. Věděli jste, že klíčové slovo break může mít číselný argument? Já se přiznám že jsme to netušil a nikdy mě to ani nenapadlo. Kolega v práci to zřejmě běžně používá, takže díky Pauci za objev :) A jak to celé funguje a na co to je? Volitelný celočíselný argument udává, z jaké hloubky zanoření v řídící struktuře má vyskočit, implicitní je 1, podívejte se na příklad:

<?php
$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />n";
        break 1;  /* vyskoci pouze ze switch. */
    case 10:
        echo "At 10; quitting<br />n";
        break 2;  /* vyskoci ze switch a while. */
    default:
        break;
    }
}
?>

Více přímo v manuálu PHP.

Další zajímavostí je řídící struktura goto. Ta je nově přidána od PHP 5.3, osobně si myslím ze goto je čisté zlo, ale určitě existuje případ, kdy se může hodit. Co mě ale zaujalo nejvíce, přímo v manuálové stránce PHP je naprosto překvapivě umístěn obrázek (s tím jsem se v manuálu PHP nikdy nesetkal), který je navíc pojatý jako komiks a zřejmě vyjadřuje názor autora(ů) manuálové stránky na přidání struktury goto do jazyka :)

goto

Zdroj obrázku: xkcd.

2 komentáře k článku “PHP: break a goto řídící stuktury”

  1. Richard napsal:

    No tak multi-level break a continue (o kterem nepises) jsou v PHP dávno známy ;) Stejně jako to má i java nebo javascript (jen nemají číslované zanoření skoku ale skáče se na label, což je tak trošku náhrada za absenci goto).
    O tom goto jsem nevěděl, autoři pořád po posledním referendu o jeho zrušení nikde snad nezvěstovali že ho dají zpět. Na jednu stranu v php nevidím moc využití pro programátory webového formuláře to asi moc potřeba není. Na druhou stranu pokud je podporuje vývojové IDE a lze po nich skákat v kódu jednoduše tak to na přehlednosti až tolik neubere. U skriptovacího jazyka navíc sebou nenese problémy a zmatky s pamětí když se vše alokuje a uvolňuje samo. Alespoň to posune PHP zas o kousek dál v poli použitelnosti pro psaní algoritmů. Jsem pro.

  2. Jens napsal:

    Osobně si myslím, a napsal jsem to i v článku, že goto je špatné v každém jazyku, ať už je to skriptovací nebo jiný. Vím že někdy se hodí, ale vždycky lze napsat program bez jeho použití a vyvarovat se tím jak nečitelnosti kódu, tak možným problémům a chybám které může jeho špatné použití způsobit.