Grundsätzlich bin ich ja ein großer Fan von require_once() oder auch mal von include_once(). Aber wie bei allen Dingen im Leben sollte man auch hier wissen was man tut.

Üblicherweise wird mit diese Befehlen ja eine Klassendatei oder eine Funktionsbibliothek inkludiert. Letztlich fand ich aber ein Stelle an der Code der direkt ohne Funktionsaufruf ausgeführt werden sollte inkludiert wurde. Da gab es als ein Konstrukt wie dieses hier:

Datei require_me.php:

<?php 
    echo "$i <br />";
?>

Datei require.php:

<?php  
    for ($i = 0; $i < 10; $i ++)
    {
        require_once ('require_me.php');
    } 
    echo "Nach der Schleife: $i"; 
?>

Eigentlich sollte an erwarten, dass die Zahlen von 0 bis 9 und der Wert nach der Schleife ausgegeben werden, wenn man require.php aufruft. Aber weit gefehlt. Die Ausgabe sieht so aus:

0
Nach der Schleife: 10 

Dadurch, dass hier ein require_once() genutzt wurde wird der Code nur ein Mal eingebunden. Beim zweiten und allen weiteren Schleifendurchläufen wird die Datei also nicht noch einmal eingelesen was dazu führt, dass der Code nicht noch einmal ausgeführt werden kann. Die Nutzung eines requires() anstelle von require_once() hätte das verhindert. Wobei auch das ungeschickt ist weil die Datei dann bei jedem Durchlauf eingelesen werden muss. Viel schlauer wäre es den zu inkludierenden Code in einer Funktion zu kapseln und die Funktionsdatei schon vor der Schleife einzulesen. In der Schleife muss dann nur noch nur die Funktion aufgerufen werden.