Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Ja ist es. Die Alternative ist es mit einem Buffer zu arbeiten, wenn man das will, dann kann man das auch (Mit allen Nachteilen). Es macht keinen Sinn etwas sinnloses zu erzwingen. Es gibt auch keine sinvolle Alternative, die nichts macht außer zu beschränken.
Vielleicht von einem Anwendungsentwickler, der gezwungen ist, mit PHP zu arbeiten. Obwohl ich auch da nicht unbedingt von einer klugen Designentscheidung sprechen würde. Dass PHP in dieser Hinsicht klug designed wurde, kann man allerdings definitiv verneinen.
Eine andere Möglichkeit wäre dem Interpreter beizubringen, beim Einlesen einer Datei Leerzeichen/ Zeilenumbrüche/ etc am Dateiende bzw nach ?> automatischzu entfernen. Das wäre zumindest mal eine Option.
Das ist keine Option, aus einem ganz einfachen Grund. Man würde eine bewusste Entscheidung (kein "?>" setzten) damit ersetzen, dass der Interpreter errät, was du möchtest. Muss man da noch erklären warum das schlecht ist�
Eine andere Möglichkeit wäre dem Interpreter beizubringen, beim Einlesen einer Datei Leerzeichen/ Zeilenumbrüche/ etc am Dateiende bzw nach ?> automatischzu entfernen. Das wäre zumindest mal eine Option.
Und was ist jetzt, wenn ich nach dem ?> bewusst Leerzeichen und Zeilenumbrüche setze...
Yeah noch mehr Raterei, Annahmen etc. pp. im PHP Interpreter...
Das ist keine Option, aus einem ganz einfachen Grund. Man würde eine bewusste Entscheidung (kein "?>" setzten) damit ersetzen, dass der Interpreter errät, was du möchtest. Muss man da noch erklären warum das schlecht ist�
Und was ist jetzt, wenn ich nach dem ?> bewusst Leerzeichen und Zeilenumbrüche setze...
Yeah noch mehr Raterei, Annahmen etc. pp. im PHP Interpreter...
Kannst du auch einen Fall nennen, in dem es wirklich nötig ist nach ?> ein Leerzeichen zu setzen?
Was passiert denn, wenn ich <?php echo ('1' && new Exception); ?> ausführen möchte. Scheiß Interpreter, dass er mich das nicht machen lässt. Ist aber eben Käse.
Doch, da Encoding schwer ist. Der Interpreter muss also Raten ob alle Zeichen nach dem "?>" als leer Wahrgenommen werden. Wenn dann irgendein komisches Zeichen im Quellcode ist, dass man nicht unbedingt angezeigt wird, wie soll sich der Interpreter verhalten?
Ein ähnliches Problem hatte ich erst letztens, allerdings in Java Script. Eine Library ist im Frontend mit einem Fehler abgebrochen, weil in einem UTF-8 Text ein unbekanntes Zeichen (oder Fehler) war. Wir haben es nicht gefunden und mussten den Text in ein anderes Format (in dem das Zeichen wohl nicht vorhanden war) und dann wieder zurück zu UTF-8 kodieren.
Der einzige Weg ein Verhalten zu haben, dass immer gleich ist, ist alles nach dem "?>" auszugeben, anstatt den Interpreter über den Sinn und Unsinn von Zeichen urteilen zu lassen.
Okay, dann erkläre mir bitte, wie ich es in Java hinbekomme außerhalb einer Klassendefinition (aber im entsprechenden Dokument) eine Methode zu definieren.
Wieso ich das vollkommen irrsinnigerweise machen sollte, spielt natürlich keine Rolle, aber es muss ja wohl möglich sein:
int tolleFreieMethode {
// ohne Begründung, warum man das tun sollen wollte
// muss es ja wohl möglich sein
// an dieser Stelle eine Methode zu definieren, oder?
// Argumentation = 0
// Bullshit = 1
}[/src]
Im Übrigen heißt Leerzeichen nach ?> entfernen nicht, dass es gänzlich unmöglich wäre ein Leerzeichen dahinter zu erzwingen.
Entweder mittels expliziter Ausgabe innerhalb von PHP:
[src=php]<?php echo ' '; ?>[/src]
oder mittels erzwungenem Leerzeichen auf HTML-Ebene:
[src=html5]<?php /* dein code */ ?> [/src]
@LemonDrops: Es soll schwer sein sich das erste Zeichen nach ?> anzuschauen?
Es gibt nur eine begrenzte Menge an
) angegeben. Du kannst also sehr wohl auch so Webapplikationen erstellen, dass sie die korrekte Zeichenkodierung verwenden, ohne zu wissen, welche Zeichenkodierung vom interpretierenden System standardmäßig verwendet wird, indem du nämlich explizit eine bestimmte Kodierung über alle Ebenen "erzwingst".
Ob das technisch alles so einfach ist werden wir nicht klären können, nehmen wir mal an man könnte Problemlos alle Situationen abdecken, ohne Sicherheitsprobleme usw.
Es gibt es noch weitere wichtige Frage, wenn man deine Lösung in Betracht zieht:
Warum soll sich PHP standardmäßig so verhalten, wie es in der Regel nicht erwünscht ist? (Normalerweise will man dass das Dokument so schnell wie möglich raus gehen.)
Viel wichtiger ist, warum sollte man eine einfache, funktionierende Lösung ersetzen?
Okay, dann erkläre mir bitte, wie ich es in Java hinbekomme außerhalb einer Klassendefinition (aber im entsprechenden Dokument) eine Methode zu definieren.
Wieso ich das vollkommen irrsinnigerweise machen sollte, spielt natürlich keine Rolle, aber es muss ja wohl möglich sein:
Im Übrigen heißt Leerzeichen nach ?> entfernen nicht, dass es gänzlich unmöglich wäre ein Leerzeichen dahinter zu erzwingen.
Entweder mittels expliziter Ausgabe innerhalb von PHP:
[src=php]<?php echo ' '; ?>[/src]
oder mittels erzwungenem Leerzeichen auf HTML-Ebene:
[src=html5]<?php /* dein code */ ?> [/src]
Hier das Leerzeichen zu entfernen wäre unintuitiv.
Gleichzeitig würde das entfernen von folgenden Leerzeichen, den Behandlungsraum des Interpreters aufwendig erweitern.
So ist klar, der Interpreter arbeitet zwischen <?php und ?> und nicht außerhalb.
Mensch leute - das schöne an php ist doch das sie nicht so strickt wie z.B. java ist - und man seinen Programmierstiel an die Gegebenheiten gut anpassen kann.
Man kann wenn nötig sehr strickt und stark objektorientiert schreiben - jedoch auch mal nur 3 Zeilen "hinrotzen" die dann einen kurzfristigen Dienst tun.
Ich finde das als einen großen Vorteil - und daher kein Grund darüber zu disskutieren was richtig oder besser ist. Beides ist richtig und an der passenden Stelle eingesetzt auch die richtige Wahl.
Das zeugt aber auch schon von einem sehr sauberen Programmierstil!
Zumal für den Fall klar ist, dass du " blabla" nicht entfernen wirst. Leerzeichen entfernen wäre ja nur dann sinnvoll, wenn dahinter nichts mehr kommt. Denn selbst wenn ich hier das Leerzeichen entferne, habe ich eine Ausgabe erzeugt und kann den Header nicht mehr weiter modifizieren:
preheader.php
[src=php]<?php
$setze = "hier";
$ganz = "setze ich";
$viel = "viele";
$config = "variablen";
?> hier lohnt sich das Entfernen des Leerzeichens nicht[/src]
Es ist natürlich nur interessant Leerzeichen zu entfernen, wenn dahinter im Dokument sonst kein Inhalt mehr erfolgt, etwa:
preheader.php
[src=php]<?php
$setze = "hier";
$ganz = "setze ich";
$viel = "viele";
$config = "variablen";
?> [/src]
(Man beachte, hinter dem ?> befindet sich ein Leerzeichen!)
page.php
[src=php]<?php
include('preheader.php'); // wenn das Leerzeichen entfernt wird, habe ich gewonnen || der Interpreter braucht sich erst an dieser Stelle darum zu kümmern!
header('Location: http://google.de');
?>[/src]
Für den Fall, dass du soetwas programmieren möchtest:
seltsamer.php
[src=php]<?php
echo 'Hallo';
?> [/src]
(Leerzeichen hinter dem ?>)
programmierstil.php
[src=php]<?php include('seltsamer.php'); ?>Welt<?php
echo ', wie geht es dir?';
?>[/src]
würde ich dich ohnehin fragen, ob du mich verarschen willst oder ob du tatsächlich so dämlich bist.
Das macht man einfach nicht..
Gleichzeitig würde das entfernen von folgenden Leerzeichen, den Behandlungsraum des Interpreters aufwendig erweitern.
So ist klar, der Interpreter arbeitet zwischen <?php und ?> und nicht außerhalb.
Ist doch vollkommen egal, ob ich das möchte und ob das sinnvoll ist, weil es ja theoretisch sein könnte, dass man das tun möchte.
Das war deine Argumentation, bzw keine Argumentation, ich wollte dir damit nur vor Augen führen, wie du gerade argumentiert hast.