Tach!
PHP kennt die Wochentage (ebenso Monatsnamen) zwar nicht "selbst", kann aber - vorausgesetzt man wirft mal einen Blick ins Handbuch - die Funktionen bzw. Libarys des OS "wrappen"(*): […] Das macht PHP auch bei hunderten anderer Funktionen.
Wo genau macht PHP das? Anzubieten, dass man setlocale() selbst nutzen kann, ist noch nicht, dass "PHP das macht".
Ganz einfach schon bei strftime selbst. ctime ist eine solche lib und wird von PHP eingebunden und, ebenso wie andere Funtionen aus der libc, benutzt.
Warum hat strftime dann keinen Parameter, um die Sprache auszugeben? Du meinst also nicht, dass PHP setlocale() setzt, so wie du es in deinem Code gezeigt hast, sondern dass es die Angaben aus der locale-Bibliothek entnimmt, wenn man als Anwender es zuvor gesetzt hat. Bleibt noch die Aussage, dass hunderte Funktionen das so machen würden.
Deswegen auch das Verhalten bezüglich der Prozesse/Threads. Hat man den Webserver "multithreaded" und PHP als Modul bzw. fcgi oder als ähnlichen Prozess am laufen kann es zwar Probleme geben, es wird aber genügen setlocale vor der ersten Ausgabe zu verwenden.
Sicher? setlocale() löst nicht magisch alle Probleme. Wenn man bisher überhaupt nicht daran gedacht hat, setlocale() zu verwenden, dann müssten doch nun "bei hunderten anderer Funktionen" andere Ergebnisse enstehen, als man zuvor hatte. Das soll keine Probleme erzeugen?
dedlfix.