make sure the universe was still functioning properly
Also die letzten 3 Stunden hab ich ja mit einem der echt üblen Fehler.
Um ca. 17-18 Uhr hab ich eine neue Version auf dem Webserver hochgeladen.
Des PHP-Script ist ein 890KiB (nicht kB) File – mit ca. 500 Klassen drin. Auf der Entwicklungs-Kiste lief des Script eigentlich ohne Probleme – auf dem Beta-Webserver hochgeladen kommen auf einmal die unmöglichsten Fehlermeldungen – “hier Objekt nicht da” – “dort Endlosloop” . Was eigentlich garnich sein kann – weil Teilweise die Methoden
-
<?php
-
class Foo {
-
public function bar(Bar $fail) {
-
$fail->random();
-
}
-
}
-
?>
Mit nem “method called on non-object” abfliegt – wohl gemerkt kein “Argument 1 passed to Foo::bar() must be an object of class Bar“. Jetzt stellt sich natürlich die Frage was da los is – weitere Tests haben dann den Fehler sogar auf “var_dump($this);” mit der Ausgabe “NULL” zurückgeführt.
Sehr toll sind natürlich dann auch Scripte ala:
-
<?php
-
class Foo {
-
public function bar(Bar $fail) {
-
while ( ! $fail->loaded) {
-
$fail->load();
-
}
-
}
-
}
-
?>
Danke des nicht vorhandenen E_STRICT (jetzt isses wohl zu spät dem Src des noch beizubringen) läuft dies natürlich while …. unendlich (PHP geht einfach mal davon aus wenn $fail Null ist könnte man ja ein Objekt vom Typ stdClass draus machen wenn da jemand ne Eigenschaft von laden will – die dann halt mal NULL ist)
Das Test-Script hier z.b. läuft nach ca. 20 Loops mit dieser Ausgabe auf:
Setting: int(890) Setting inside: int(890) now inside: NULL Getting inside: NULL Getting: NULL $this reference fail!
Hier der komplette Quellcode:
-
<?php
-
-
-
class foo {
-
-
private $integer;
-
-
public function set ($i) {
-
echo ‘<br>Setting inside: ‘;
-
$this->integer = $i;
-
echo ‘<br>now inside: ‘;
-
}
-
-
public function get () {
-
echo ‘<br>Getting inside: ‘;
-
return $this->integer;
-
}
-
}
-
-
-
$temp = new foo ();
-
echo ‘<br>Setting: ‘;
-
-
$temp->set($random);
-
$get = $temp->get();
-
if ($get != $random) {
-
echo ‘<br>Getting: ‘;
-
echo ‘<h1>$this reference fail!</h1>’;
-
}
-
?>
-
<script>
-
window.setTimeout(‘document.location.href="test.php";’, 100);
-
</script>
Die “große” Datei mit allen Klassen ist auch schon mit der alten ausgetauscht worden – die Klassen einzeln über einen autoloader eingebunden – der lighttpd angehalten usw… Webserver neustarten bringt nur was für n paar Minuten … echt ich hab kein Plan was da los sein soll…. Als würde ein Kobold meine Referenzen durcheinander würfeln oder natürlich der Webserver steht auf Htrae.
Und wieder bin ich beim:
-
/* This program will only run if the laws of mathematics hold */
-
//Oh crap – we are not running in the correct Universe
-
assert true;
ps.:
hehe Melodic-Death-Comic-Metal Deadlock – Htrae – reinhörn
