Ik ben mijn website aan het overzetten naar een andere host, maar daar werkt de pagina niet meer door een 'break' in PHP. Ik heb als test even de volgende pagina gemaakt.

<?php

$test = "test";
echo $test;

if($test == "test") {echo "piet"; break;}

echo "jan";

?>


Bij mijn oude host krijg ik dan 'testpiet' als resultaat, maar bij mijn nieuwe host een witte pagina. De PHP-versie staat op 7.0. Enig idee of er een manier is om dat aan te zetten? Of zie ik iets over het hoofd?
Zet in PHP 7 eens error reporting aan, en zie:

Fatal error: 'break' not in the 'loop' or 'switch' context in /bla/bla.php on line ...

Op voorgaande PHP versies werd de het script tot aan de break gewoon uitgevoerd, maar zag je normaal gesproken wel een warning daarna.

De vraag is echter.... Wat doet de break daar? Bedoel je geen exit of die() om het script te stoppen?
En om verder te borduren op je vraag: Waarom moet je script abrupt stoppen? Kan je dit niet netjes handlen met if-else statements?

Kijk in je errorlogfile.
Daar staat zoiets in:
PHP Fatal error: 'break' not in the 'loop' or 'switch' context in ........
Ik heb de error reporting aangezet. Bij mijn 'oude host' zegt hij dan 'Fatal error: Cannot break/continue 1 level in /bla/bla/test.php on line 13' maar bij mijn 'nieuwe host' krijg ik dan geen error, gewoon een compleet witte pagina. Als ik 'break' weghaal geeft hij wel de error dat de eerste $test undefined is, dus de error reporting doet het wel. Maar ik zie dat die oude host nog op 5.5.38 stond en de nieuwe op 7.0.18. Wat gaat er dan mis?

Tussen de pagina's die ik wil overzetten zitten wel een paar complexe scripts waar ik 'break' heb gebruikt. Ik zit er niet echt op te wachten dat ik die allemaal moet gaan wijzigen. Deze code is niet zozeer een concreet voorbeeld, maar puur om te testen of de pagina werkt.

<?php

ini_set('display_errors',1);
error_reporting(E_ALL|E_STRICT);

echo 'Current PHP version: ' . phpversion();

echo $test;
$test = "test";
echo $test;

if($test == "test") {echo "piet"; break;}

echo "jan";

?>

Maar waarom een 'break'?

G Jansma op 13/05/2017 21:31:21

Ik zit er niet echt op te wachten dat ik die allemaal moet gaan wijzigen.

Ken je 'find & replace' al?
Wanneer je break correct gebruikt, dus in de situaties waar dat zou mogen geeft het geen problemen. Je probleem is dus per definitie dat je break niet correct gebruikt.
Ik heb een loop met daarin tien stappen per loop. Als de invoer aan de stap voldoet dan stopt die loop dmv de break. Dat kan dus bij de eerste stap zijn, bij de achtste of bij de tiende. Maar ze moeten wel allemaal doorlopen worden totdat het succesvol is. En het is lastig om het in if-else te gieten.

Edit: Maar zover ben ik nog niet gekomen om die betreffende pagina's te gaan checken. Dit scriptje leek me ook te moeten functioneren gezien het op mijn oude host (weliswaar 5.5) ook werkt. Maar is het dan een PHP 7.0 kwestie, of ligt het aan de host?
In jouw test-script gebruik je 'break' verkeerd. Dát is de kwestie.
- Ariën - op 13/05/2017 21:56:52

In jouw test-script gebruik je 'break' verkeerd. Dát is de kwestie.


Klopt.
Zo werkt het namelijk wel gewoon:
<?php

ini_set('display_errors',1);
error_reporting(E_ALL|E_STRICT);

echo 'Current PHP version: ' . phpversion();

echo $test;
$test = "test";
echo $test;

while(true)
{
if($test == "test") {echo "piet"; break;}
echo "jan";
}
?>
@SanThe: In PHP 7 wordt het hele script niet eens met uitgevoerd dan. Geloof ik...
>> Edit: Maar zover ben ik nog niet gekomen om die betreffende pagina's te gaan checken. Dit scriptje leek me ook te moeten functioneren gezien het op mijn oude host (weliswaar 5.5) ook werkt. Maar is het dan een PHP 7.0 kwestie, of ligt het aan de host?

Weet je dan wel zeker dat het probleem break is? Of zit je je blind te staren op iets anders, zoals het gebruik van de oude mysql extensie?

@Ariën dat geldt voor alle PHP versies vanaf 4.0.0.

Reageren