php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen
Alt 19.06.2009, 19:18  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.768
PHP-Kenntnisse:
Fortgeschritten
rudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehen
Standard debug class programmierstil

Hallo zusammen,

habe mich vorhin mal überwunden und mir endlich mal eine debug classe geschrieben.
Ich stell die mal hier in den Raum, wäre super, wenn sich jemand die genauer anschauen könnte hinsichtlich Programmierstil.

PHP-Code:
<?php
class Debug
{
    private static 
$_db;

/**
 * @author Sebastian Sauer
 * @since 19.06.2009
 * @version 0.1
 * @todo - modify method log for Zend Framework
 *       - add forceLog method
 * 
 * environment constants :
 * APPLICATION_FRAMEWORK [optional] 
 * APPLICATION_ENV [optional]
 * APPLICATION_PATH [optional]
 * 
 *
 */

/**
 * 
 * @private method checkParameters 
 * @param string $param
 * @return boolean
 */
    
private static function checkParameters($param=''
    {
        if (empty(
$param)) {
            return 
false;
        }
        if (
$_SERVER['HTTP_HOST']=='pages') {
            if (!
defined('APPLICATION_ENV')) {
                
define('APPLICATION_ENV''development');
            }
        }
        if (!
defined('APPLICATION_ENV')) {
            return 
false;
        }
        if (!
defined('APPLICATION_PATH')) {
            if (
is_readable(__DIR__."/MySQL.class.php")) {
                
define('APPLICATION_PATH'__DIR__);                
            }
            else if (
is_readable(__DIR__."/application/MySQL.class.php")) {
                
define('APPLICATION_PATH'__DIR__);                
            }
        }
        return 
true;
    }

/**
 * @private method getModel 
 * @return 
 */

    
private static function getModel()
    {
        require_once(
APPLICATION_PATH.'MySQL.class.php');
        require_once(
APPLICATION_PATH.'dbfunctions.class.php');
        
MySQL::getInstance();
        
$resource MySQL::getResource();
        
self::$_db = new dbfunctions($resource);
        return;
    
// end function
    
}
/**
 * 
 * @return string the one to be dumped
 * @param string $var
 */
    
private static function returnFormattedString($var)
    {
        
$returnVal "<pre>";
        
$returnVal .= var_dump($var);
        
$returnVal .= "</pre>";
        return 
$returnVal;
    
// end function
    
}

/**
 * * 
 * @static method dump
 * @param object $var string or object to be dumped out formatted
 * @access public
 * @return string
 */
    
public static function dump($var)
    {
        
$init self::checkParameters($var);
        if (!
$init) return;
        if (
defined('APPLICATION_FRAMEWORK'
                    && 
APPLICATION_FRAMEWORK == 'Zend') {
            return 
Zend_Debug::dump($string);
        }
        return 
self::returnFormattedString($var);            
    
// end function
    
}

    
/**
     * @static method logData
     * @return boolean
     * @param string $val[optional] string to log
     */
   
    
public static function logData($val '')
    {
        
$init self::checkParameters($val);
        if (!
$init) return;
        if (
defined('APPLICATION_FRAMEWORK'
                    && 
APPLICATION_FRAMEWORK == 'Zend') {
            return;
        }
        try {
            
self::getModel();
            
$logdata serialize($data);
            
$sql "INSERT INTO 
                        logging
                    SET 
                        logtext = '"
.self::$_db->escape($logdata)."';";
            
$result self::$_db->query($sql);
        }
        catch (
Exception $e) {
            if (
defined(APPLICATION_ENV) && APPLICATION_ENV == 'development') {
                echo 
"<h2>logging fehlgeschlagen</h2>";
            }
            return 
false;
        }
        
self::$_db='';
        return 
true;
    
// end function
    
}

/**
 * 
 * @return mixed | array OR bool false
 * @param object $limit[optional]
 */
    
public static function retrieveLog($limit='10')
    {
        
self::getModel();
        try {
            
$sql "SELECT 
                        logtext
                    FROM
                        logging
                    ORDER BY id DESC
                    LIMIT 
                        '"
.self::$_db->escape($limit).";";
            
$result self::$_db->Select($sql);
            
$rows self::$_db->returnResult();
            foreach (
$rows as $key => &$var) {
                
$var unserialize($var);
                
$var returnFormattedString($var);
            }
        }
        catch (
Exception $e) {
            if (
defined(APPLICATION_ENV) && APPLICATION_ENV == 'development') {
                echo 
"<h2>logging fehlgeschlagen</h2>";
            }
            return 
false;
        }
        return 
$rows;
    
// end function    
    
}
}
Über feedback/Kritik/Anregungen würd ich mich freuen


Basti
__________________
I like cooking my family and my pets.
Use commas. Don't be a psycho.
Blog - CoverflowJS
rudygotya ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.06.2009, 19:52  
Moderator
 
Registriert seit: 11.05.2008
Beiträge: 6.627
Chriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz sein
Standard

Hallo,
du hast zuviele Abhängigkeiten in deiner Klasse, als dass sie für jemand anderen als dich hilfreich wäre. Und ob sie das für dich ist, kannst nur du beurteilen.

Meine findest du hier, vielleicht findest du ja Ideen darin:
Debug_class - PHP Classes

PS: Zum Autor-Kommentar gehört immer noch eine Emailadresse.
Chriz ist offline  
Alt 20.06.2009, 00:25  
Moderator und Wett-König
 
Registriert seit: 21.05.2008
Beiträge: 3.753
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblick
Standard

Hallo rudygotya,

eine Debug-Klasse zu schreiben macht aus meiner Sicht keinen Sinn, denn diese wird niemals den Anforderungen an Debugging gerecht, die du heutzutage benötigts. Wenn du sinnvolle Mittel für die Entwicklung und den Betrieb bereitstellen möchtest, so solltest du

  • z.B. Netbeans + xdebug für das echte Debugging nutzen und
  • ein Benchmark-Tool in deine Applikation integrierst, das dir die relevanten Stellen bewertet.
So hast du sowohl während der Entwicklung als auch im Betrieb geeignete Mittel. Zum Thema Benchmarking kannst du dir ja mal Benchmark :: Adventure PHP Framework (APF) ansehen.

Viele Grüße,
Dr.E.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 20.06.2009, 02:24  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.768
PHP-Kenntnisse:
Fortgeschritten
rudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehen
Standard

Hallo,


schon mal danke für das feedback Habe diesbezüglich anscheinend einige Lücken

@ Chriz:
- deine log methode find ich sehr genial, func_num_args und func_get_arg kannte ich noch nicht!
- debug_backtrace kannte ich auch noch nicht, memory usage hab ich bisher direkt in linux mit top oder mit xdebug überwacht

Mir ist leider nicht ganz klar, wieso du output buffering benutzt?
Mit error_log zu arbeiten schaut sehr elegant aus. Benutzt du die Klasse auch mit irgendwelchen Frameworks ohne Probleme? Das output buffering schreckt mich irgendwie ab.

Zu den phpdoc kommentaren: Da habe ich leider ehrlich gesagt ein schlechtes Halbwissen mit ekelhaftem Gefühl in der Bauchgegend. Danke für den Hinweis, falls mehr falsch ist bzw. ich mehr Standards verletze, nur raus damit.

Zur Wiederverwendbarkeit: Imho richte ich für alle meine pages einen logging table ein (wenn nicht schon vorhanden), ein Interface oder eine parent abstract class wäre vielleicht dennoch sinnvoll. (Falls man dann doch nicht nur mysql verwendet, etc.). Darf ich Teile deiner Klasse abwandeln?

@ Dr.E. : Ich hatte mir schon ewig vorgenommen, das APF genauer anzusehen, der output des benchmarks sieht wirklich sehr gut aus.
Xdebug + div. eclipse derivate (hauptsächlich aptana) benutze ich schon länger- netbeans habe ich mir erst vor 2 Tagen angesehen (und das dann natürlich noch nicht so genau). Die rendertime habe ich auch berechnen lassen, jedoch nie so modular. Was mich wirklich interessiert, wie du an die ganzen Objekte und Module kommst?
Muss ich die alle manuell zuweisen ?Oder doch automatisch, wenn beim Scriptstart das Singletion gestartet wird (irgendwie unvorstellbar)?

In der Produktion lasse ich mir atm alle queries loggen, die länger als 10 Sekunden dauern. Und das ist mir zu wenig Info, da will und muss ich an der Ablaufverfolgung arbeiten.
Und was mich dabei wirklich brennend interessiert:
Entfernt ihr alle Debug- Ausgaben für das Produktiv- System oder laßt ihr die im quelltext stehen und arbeitet dann mit der Unterscheidung Produktions-/Entwicklungsumgebung?
Im 2. Falle würden mich Erfahrungswerte interessieren, inwieweit die Latenz der Seite durch Debugging/Logging unnütz leidet. Der Unterschied sollte doch marginal sein oder irre ich mich da?

______________
edit: hab mir das apf mal runtergeladen, ich probiers bei Gelegenheit das benchmarking selbst aus
__________________
I like cooking my family and my pets.
Use commas. Don't be a psycho.
Blog - CoverflowJS

Geändert von rudygotya (20.06.2009 um 11:45 Uhr).
rudygotya ist offline  
Alt 20.06.2009, 13:22  
Moderator
 
Registriert seit: 11.05.2008
Beiträge: 6.627
Chriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz seinChriz kann auf vieles stolz sein
Standard

Zitat:
Zitat von rudygotya Beitrag anzeigen
@ Chriz:
- deine log methode find ich sehr genial, func_num_args und func_get_arg kannte ich noch nicht!
Ehrlich gesagt benutze ich die am seltensten. Viel wichtiger finde ich mal eben reinzuschauen was in einer Variable steht und weil ich schnell mal zur Kaffeemaschine renne, find ichs gut, dass dann dort auch gleich noch steht, wo die Funktion aufgerufen wurde. Zu oft schon hab ich var_dump() Ausgaben gefunden, die sich nur mies lokalisieren liessen (MVC, Layout, Template, Plugin, ActionHelper, find da mal die richtige Stelle).

Zitat:
Zitat von rudygotya Beitrag anzeigen
debug_backtrace kannte ich auch noch nicht, memory usage hab ich bisher direkt in linux mit top oder mit xdebug überwacht
Letztlich ist das nur ein Gimick

Zitat:
Zitat von rudygotya Beitrag anzeigen
Mir ist leider nicht ganz klar, wieso du output buffering benutzt?
Mit error_log zu arbeiten schaut sehr elegant aus. Benutzt du die Klasse auch mit irgendwelchen Frameworks ohne Probleme? Das output buffering schreckt mich irgendwie ab.
Ich benutze sie mit dem Zend Framework und sie macht keine Probleme. In einer anderen Variante schicke ich noch einen Content-Type: text/plain und einen HTTP-500 Fehler mit, so dass ich im Firebug gleich den rot-gefärbten AJAX-Request sehe und im Zweifel fälschlich im Produktivsystem verwendete Debug-Ausgabe im Error-Log finden kann. Aber das sind mehr oder weniger nützliche Features, jeder hat da seinen eigenen Geschmack.
Da Outputbuffering geschachtelt werden kann, macht es überhaupt keine Probleme, var_dump() ist einfach besser als print_r(), deshalb muss ich puffern.

Zitat:
Zitat von rudygotya Beitrag anzeigen
Zu den phpdoc kommentaren: Da habe ich leider ehrlich gesagt ein schlechtes Halbwissen mit ekelhaftem Gefühl in der Bauchgegend. Danke für den Hinweis, falls mehr falsch ist bzw. ich mehr Standards verletze, nur raus damit.
Ist nur so eine Sache, wenn man fremde Klassen benutzt gehört ne Kontaktmöglichkeit dazu, ein Name ist einfach nichts-sagend. Benutzt du Eclipse PDT? Dort hast du Doc-Comment Autosuggestion.

Zitat:
Zitat von rudygotya Beitrag anzeigen
Zur Wiederverwendbarkeit: Imho richte ich für alle meine pages einen logging table ein (wenn nicht schon vorhanden), ein Interface oder eine parent abstract class wäre vielleicht dennoch sinnvoll. (Falls man dann doch nicht nur mysql verwendet, etc.). Darf ich Teile deiner Klasse abwandeln?
Du darfst rauskopieren was du möchtest. Ich würde dein Logging trotzdem in eine Datei schreiben. Als eine der häufigsten Fehlerquellen würde ich die Datenbank einschätzen, und da ist es einfach keine gute Idee, das Logging dort unterzubringen.
Chriz ist offline  
Alt 20.06.2009, 16:23  
Moderator und Wett-König
 
Registriert seit: 21.05.2008
Beiträge: 3.753
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblick
Standard

Hi,

Zitat:
Was mich wirklich interessiert, wie du an die ganzen Objekte und Module kommst?
Muss ich die alle manuell zuweisen ?Oder doch automatisch, wenn beim Scriptstart das Singletion gestartet wird (irgendwie unvorstellbar)?
Die Methode des Benchmarks basiert darauf, dass der Page-Controller implizit für den Benutzer bereits sehr viele Messpunkte aufnimmt, auf die du als Entwickler nicht achten musst. Man könnte also fast(!) von Aspektorientierung sprechen. Du siehst quasi sowohl den Aufbau des Objektbaums bis zum ersten ::transform() als auch das eigentliche Rendering genau so wie es hirarchisch auch passiert. Sprich ist die Schachtelung noch tiefer, wird das auch in der Ausgabe der Benchmark-Punkte berücksichtigt.
Dabei nutze ich die Klasse benchmarkTimer als Singleton und starte/stoppe verschiedene Messpunkte wann immer ich es möchte. Den Bencharker rufe ich dabei so auf:

PHP-Code:
$bench = &Singleton::getInstance('benchmarkTimer');
$bench->start('Messpunkt A');
...
$bench->stop('Messpunkt A'); 
Ist am Ende der Seite (üblicherweise der index.php, wenn mit Bootstrapping gearbeitet wird) eine Ausgabe der Form

PHP-Code:
$bench = &Singleton::getInstance('benchmarkTimer');
echo 
$bench->createReport(); 
enthalten, wird der Report wir du ihn gesehen hast angezeigt. Die Einbindung des Benchmarkers erfolgt dabei für dich automatisch vom Page-Controller, der diesen initialisiert und später Messpunkte deiner Komponenten selbständig aufnimmt. Hört sich nach Magic an, ist es aber an sich garnicht. Die Magie ergibt sich eigentlich durch die Funktion des Page-Controllers, der aus deinen Templates einen Objekt-Baum aufbaut und den du im Benchmarker auch durch die Einrückungen sehen kannst.


Zitat:
In der Produktion lasse ich mir atm alle queries loggen, die länger als 10 Sekunden dauern. Und das ist mir zu wenig Info, da will und muss ich an der Ablaufverfolgung arbeiten.
Dann solltest du schnellstens eine sinnvolle Benchmark-Komponente einbauen, die du auch im Betrieb nutzen kannst.

Zitat:
Und was mich dabei wirklich brennend interessiert:
Entfernt ihr alle Debug- Ausgaben für das Produktiv- System oder laßt ihr die im quelltext stehen und arbeitet dann mit der Unterscheidung Produktions-/Entwicklungsumgebung?
Im 2. Falle würden mich Erfahrungswerte interessieren, inwieweit die Latenz der Seite durch Debugging/Logging unnütz leidet. Der Unterschied sollte doch marginal sein oder irre ich mich da?
Das APF selbst besitzt keine Unterscheidung zwischen DEV und LIVE, d.h. der Benchmarker ist immer integriert. Debugging sollte definitiv nur auf DEV-Umgebungen laufen, daher ist es IMHO ratsam "externe" Debugger wie NetBeans + xdebug zu nutzen. Alles andere würde deine Performance erheblich in den Keller ziehen. Hier ist insbesondere xdebug nicht ganz unschuldig dran, denn zu Debug-Zwecken müssen sehr viele Informationen gesammelt werden.
Was den Benchmark angeht, so kann ich nur sagen, dass das APF trotz "dauerhaft" integriertem Benchmarker trotzdem schneller als der Rest der Welt ist (siehe Yii vs. APF :: Adventure PHP Framework (APF)).

Wenn du nun den Benchmarker bedingt einbaust, etwa so:

PHP-Code:
if(isset($_REQUEST['benchmarkreport']) && $_REQUEST['benchmarkreport'] == 'true'){
   
$bench = &Singleton::getInstance('benchmarkTimer');
    echo 
$bench->createReport();

kannst du das auch im Live-Betrieb aktiviert lassen und im Fall von langsamen Antworttzeiten deiner Applikation nachschauen, woran es denn liegen kann. Setzt du dann z.B. in deiner Datenbank-Abstraktionsschicht entsprechende Punkte, siehst du sofort, wo es hakt.

Zitat:
edit: hab mir das apf mal runtergeladen, ich probiers bei Gelegenheit das benchmarking selbst aus
Klar. Wenn du dazu noch Fragen hast, immer her damit.

Viele Grüße,
Dr.E.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 23.06.2009, 02:53  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.768
PHP-Kenntnisse:
Fortgeschritten
rudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehenrudygotya genießt hohes Ansehen
Standard

Hi,

danke für eure Antworten, komme leider jetzt erst zum antworten.

@ Chris: Aptana (auch Eclipse Derivat, aber das kennst du sicher). Meiner Meinung nach auch nur eine halbe Suggestion. PDT erst vor 2 Wochen runtergeladen, aber noch nicht viel ausprobiert.

Bisher habe ich zum loggen immer erst versucht, in die DB zu schreiben, danach erst als textdatei.
Allerdings habe ich das über ein exception Objekt gemacht, der ich nur einen string übergeben mußte und das ich im Bedarfsfall auch nicht geworfen habe. Noch stukturell zu unsauber mit zu wenig info.

@ Dr. E. Soweit ich das richtig sehe, müßte ich für das APF benchmarking jedes Backend ins APF integrieren... Oder besteht da eine chance, dein Modul auch getrennt laufen zu lassen???
Wär genial!!

Alternativ:
Durch den quellcode und deine Beispiele inspiriert habe ich mir überlegt, eine 3. Umgebung (development/production/benchmark) einzubauen. Zu benchmark- Zwecken über die autoload methode jedes Objekt auffangen (über Konstanten regeln) , dann hätte ich am Ende den gewünschten benchmark output.

Gruß


Basti
__________________
I like cooking my family and my pets.
Use commas. Don't be a psycho.
Blog - CoverflowJS
rudygotya ist offline  
Alt 23.06.2009, 08:20  
Moderator und Wett-König
 
Registriert seit: 21.05.2008
Beiträge: 3.753
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblickdr.e. ist ein wunderbarer Anblick
Standard

Hallo,

Zitat:
@ Dr. E. Soweit ich das richtig sehe, müßte ich für das APF benchmarking jedes Backend ins APF integrieren... Oder besteht da eine chance, dein Modul auch getrennt laufen zu lassen???
Wär genial!!
Da i.d.R. jedes Backend auch ein Frontend (Präsentation) hat ist das kein Problem, denn die Frontend-Zeiten werden ja automatisch gemessen. Sprich für das Laden und Ausgeben einer beliebigen Liste siehst du ja schon die effektive Gesamtzeit.

Wenn du nicht mit dem APF direkt arbeiten möchtest, musst du dir die Klassen benchmarkTimer und Singleton aus dem Release-Package ziehen und diese in deine Applikation integrieren. Vorsicht: die import() statements müssen durch include()/require() ersetzt werden. Alleine genutzt, bringen dir die beiden Klassen jedoch nicht den beschriebenen Mehrwert, da du dann selbst Benchmark-Messpunkte setzen musst.

Zitat:
Alternativ:
Durch den quellcode und deine Beispiele inspiriert habe ich mir überlegt, eine 3. Umgebung (development/production/benchmark) einzubauen. Zu benchmark- Zwecken über die autoload methode jedes Objekt auffangen (über Konstanten regeln) , dann hätte ich am Ende den gewünschten benchmark output.
Aber doch nur das Laden/Einbinden einer Komponente, nicht aber dessen spezifische Ausführungszeit... Und (solch grausam intransparente) Dinge wie AspectJ gibt es für PHP nicht.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
 


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Datenbank Class Shuyio88 PHP Tipps 2009 2 02.03.2009 19:47
Der "richtige" Programmierstil Matze PHP Tipps 2007 15 18.01.2007 14:37
Programmierstil Fatal Error Off-Topic Diskussionen 19 04.10.2006 21:37
Frage zu Programmierstil inu PHP Tipps 2006 8 26.05.2006 08:11
Class Vars fmueller PHP Tipps 2006 10 14.02.2006 19:54
[OS|FreeGW] Class Problem ( cl_extended_database ) PHP Tipps 2006 20 08.02.2006 01:09
Mehrere Div-Layer per Class schliessen Diego1978 HTML, Usability und Barrierefreiheit 4 02.12.2005 12:10
php.de debug mode -> php.de ? php error ? notyyy Off-Topic Diskussionen 0 13.10.2005 00:03
PHP Class Datei Basirende Datenbank mit MySQL Syntax atom-dragon Beitragsarchiv 4 01.08.2005 06:57
Thema: class; Problem: Grundlegende :) PHP Tipps 2005-2 4 13.07.2005 18:40
bb stringparser class search Beitragsarchiv 4 14.04.2005 18:18
Class -- Funktion Creativ PHP Tipps 2005 2 30.03.2005 23:10
a mouseover class ändern 022.9 HTML, Usability und Barrierefreiheit 4 18.02.2005 15:51
Class und require("mydbconnection.inc.php") MadCro PHP Tipps 2004-2 2 23.11.2004 11:29
Klassenschachtelung -&amp;amp;amp;gt; Cannot Redeclare Class ... Fehler PHP-Fortgeschrittene 5 21.10.2004 18:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
debug::bench_start, php debugger class, php debug class, debugger class php, debug class php, \private static\, http://www.php.de/php-einsteiger/56246-debug-class-programmierstil.html, php class debug, php debug class file, php debugger klasse, debug.class.php, php mysql klasse mit debuggen, non-static method should not be called statically, programmierstil static php, php klassen debuggen, eclipse php abstract singleton, debug class schreiben, eclipse ablaufverfolgung über debugger, php debug singleton, netbeans php ablauf verfolgung

Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum