Mailinglisten-Archive |
Steffen Kother wrote: > Hallo Leute, > > Habe gerade mal mit PHPEdit v2.12.2.5164 mein simples 5er Testskript > "enkäfert". Hier erstmal das Skript als solches: > > <?php > require_once 'library/common.class.inc.php5'; > > $test =& single('common'); > $test -> reqClasses('mysql'); > > $result = $test -> mysql -> fetchAll(mysql::query('SELECT * FROM > sap_data.kna1 ORDER BY KUNNR ASC')); > > echo '<pre>'; > print_r($test); > echo '</pre>'; > ?> > > Funzt wie gewünscht. Error-Reporting steht auf E_ALL. Mich stört jetzt > nur noch die E_STRICT- Meldung "Non-static method mysql::query() should > not be called statically". Ohne "static"-Zusatz in der Definition der > Methode läuft das Skript relativ schnell durch. Schreibe ich aber > "static" mit rein, dann benötigt das Skript im Verhältnis dazu ewig. > Hier mal der unstatische Code der Methode: > > public function query ($query = NULL, $link = NULL) { > if (empty($this)) { > $mysql = new mysql(); > return $mysql -> query($query, $link); > } > > if (NULL === $query) { > return false; > } > > $link = $this -> checkResource('get_mysql_connect', $link); > > $resource = @mysql_query($query, $link); > $resource = $this -> checkResource('set_mysql_query', > $resource); > return $resource; > } Ja... was soll ich dazu sagen mhh... Sagen wir mal vorsichtig: Ich glaube ausser in php hast du noch nicht "richtig" OOP programmiert. Eine static Methode ist eine normale Funktion mit Klassenzugehörigkeit. Sie hat kein $this. Mit anderen Worten: Dein if (empty(this)) ist IMMER true. Damit bleibst du in einer Endlosrekursion stecken (Obwohl ich das jetzt nicht getested habe udn du nur schreibst, das es im Vergleich lange dauert aber schon funktionier...?). Wenn du sowas static machen willst, was durchaus sinnvoll ist, dann solltest du das so machen: class bla { private static $connection; private static getConnection() { if (self::$connection ===null) self::$connection =mysql_connect(..); return self::$connection; } public static query(..) { $c =self::getConnection(); mysql_query(.., $c); } } Wenn du multithreading hättest (also nicht in php, ich meine jetzt nur mal so von der OOP-Theorie her) müsstest du dann nurnoch getConnection vor gleichzeitigem Zugriff schützen und schön wäre die Klasse Threadfähig. modern würde man das natürlich auch besser mit pdo machen als mit mysql_*... > > Besten Dank Yannik
php::bar PHP Wiki - Listenarchive