php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.08.2009, 15:41  
Benjamin Such
Gast
 
Beiträge: n/a
Standard OOP - Methode - Was ist besser?

Hallo,

wo ist der Unterschied?

PHP-Code:
class MySQL {
    private 
$host;
    private 
$user;
    private 
$password;
    private 
$database;

    public function 
setConnection() {
        
$link=mysql_connect($this->host,$this->user,$this->password) or die(mysql_error());
        
mysql_select_db($this->db,$link) or die(mysql_error());
    }

und
PHP-Code:
class MySQL {
    private 
$con;
    private 
$db;
    public function 
__contruct() {
        
$this->con=mysql_connect($host,$user,$password) or die(mysql_error());
        
$this->db=mysql_select_db($database) or die(mysql_error());
    }

Was ist besser?
 
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 26.08.2009, 15:47  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Variante 2 wird nicht funktionieren, es fehlen die Parameter. Variante 1 funktioniert nur, wenn vorher die Variablen initialisiert werden.

Den Rückgabewert von mysql_connect wirst du häufiger brauchen (mysql_query, mysql_real_escape_string), solltest du also bei Variante 1 ergänzen.

Keine Variante ist wirklich ideal!

Geändert von Asipak (26.08.2009 um 15:50 Uhr).
Asipak ist offline  
Alt 26.08.2009, 17:25  
Erfahrener Benutzer
 
Registriert seit: 23.08.2009
Beiträge: 241
PHP-Kenntnisse:
Fortgeschritten
MasterD wird schon bald berühmt werden
MasterD eine Nachricht über ICQ schicken
Standard

OOP hat folgende Vorteile:
- Mehr Übersicht, da einzelne Klassen, mehr Struktur
- Variablen in jeder Klasse benutzbar (Namespace-Trennung)
- Besserer Stil
- Besserer Umgang mit anderen Frameworks / Klassen / CMS(Joomla! ab 1.5)...
- Training für andere OOP Sprachen (Java etc.)
- Für große ANwendungen ein muss!
Nachteile:
- Etwas komplizierter zu Programmieren, aber später bei der Anwendung besser
- Gewöhnungsbedürftig
- PHP war eigentlich nicht OOP, wird aber mittlerweile
- Für kleine Scripte zu viel.

Man sieht, dass die Vorteile Überweigen! (Und das ist auch gut so)
Wenn man anfängt zu programmieren, kann man das erstmal vernachlässigen,
aber später sollte man schon darufhin arbeiten

Auf jeden Fall empfehlenswert, aber wie Asipak schon sagte, funktioniert deine OOP Methode leider nicht

Greetz,
MasterD
MasterD ist offline  
Alt 26.08.2009, 17:27  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ähm, MasterD, oben sind beide Beispiel OOP. Die Vorteile von OOP waren eigentlich nicht…
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 26.08.2009, 17:40  
Erfahrener Benutzer
 
Registriert seit: 23.08.2009
Beiträge: 241
PHP-Kenntnisse:
Fortgeschritten
MasterD wird schon bald berühmt werden
MasterD eine Nachricht über ICQ schicken
Standard

Mist
MasterD ist offline  
Alt 26.08.2009, 18:57  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Was ist besser?
Keine der beiden. Wenn du eine vernünftige Abstraktion erreichen möchtest, muss die Datenbank-Klasse einige Details vom Nutzer verstecken. Anders ist es keine Abstraktion.

Im ersten Beispiel mit setConnection() explizit aufgerufen werden um eine Verbindung zu haben. Das interessiert an sich den Aufrufer nicht, er möchte lediglich eine Datenbank-Abfrage stellen.

Das zweite Beispiel entbehrt der Konfiguration des MySQL-Services (ich nenne das jetzt mal Service, weil der Anwender diesen "nutzt"). Ich muss mich weiter beim Benutzen darum kümmern, welche Datenbank mit welchen spezifischen Konfigurationsdaten ich anspreche. Im Grund möchte ich doch aber nur

PHP-Code:
$mysql ServiceFactory::getService('CommentDatabase');
$mysql->executeStatement('select foo from bar'); 
aufrufen. Woher sich der Service nun die Informationen holt, sollte dem Code, der den Service nutzt verborgen bleiben. Dieses Prinzip wird auch dependency injection genannt.

So jedenfalls ist es deiner Applikation nicht zuträglich. Noch ein Hinweis: die hier erstellte Service-Klasse sollte keinesfalls als Basis für weitere genutzt, sondern explizit - wie im Code oben beschrieben - verwendet werden. Andernfalls würde eine zustarke Abhängigkeit zur Datenquelle geschaffen, die man nicht haben möchte. Denn: die ServiceFactory könnte ja auch eine SQLite-Connection zurückliefern.
__________________
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 26.08.2009, 21:59  
ak5
Benutzer
 
Registriert seit: 26.08.2009
Beiträge: 41
PHP-Kenntnisse:
Fortgeschritten
ak5 befindet sich auf einem aufstrebenden Ast
Standard

Also ich finde es recht praktikabel Mysqli zu extenden und in den Constructor halt 'nen Connect zu machen.

Mal ehrlich - was versprichst Du dir davon hier eine Klasse zu basteln, die die uralten prozeduralen mysql_ Funktionen nutzt?

Gruß


PS: Hier mal ein simples Snippet:

PHP-Code:
<?
/**
 * dbconn extends mysqli and provides some methods
 */
class dbconn extends mysqli
{
    protected 
$c = array ('localhost''usr''pwd''databasename');


    
/**
     * just call me, and I'll connect.
     */
    
public function __construct() {
        
$c $this->c;
        @
$this->connect($c[0], $c[1], $c[2], $c[3]);
        if (@
$this->connect_errno === 0) {
            
$this->query("SET NAMES 'utf8'");
        } else {
            die(
'DATENBANK NICHT ERREICHBAR ' . @$this->connect_error);
        }
    }


    
/**
     * Call_smth() - Calls a SP
     */
    
public function call_smth() {
         
// ...
    
}
}


$db = new dbconn();
$res $db->query(sprintf("SELECT 1 from foo WHERE mail='%s'"$db->real_escape_string("Fo'o@ba.r")));

// ...
?>
PPS: Der Ansatz des Vorposter die DB statisch "dazuhaben" hat auch Reize.. genau wie PDO
ak5 ist offline  
Alt 26.08.2009, 23:45  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Also ich finde es recht praktikabel Mysqli zu extenden und in den Constructor halt 'nen Connect zu machen.
Das funktioniert sicher für kleinere Anwendungen, bei großen Applikationen ist das ein Performance-Killer. Weiterhin entspricht es nicht dem Ansatz: "Die Komposition ist der Vererbung stehts vorzuziehen!". Du machst dich damit zu sehr von MySQLi abhängig. Was ist, wenn du später die mysqlnd_*()-Funktionen nutzen möchtest? Oder wahlweise beide in deiner Applikation zu selben Zeit?

Zitat:
[..]die die uralten prozeduralen mysql_ Funktionen nutzt?
Für PHP4 gibt es IMHO keine Alternative.
__________________
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 26.08.2009, 23:52  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Das funktioniert sicher für kleinere Anwendungen, bei großen Applikationen ist das ein Performance-Killer.
Meinst Du das so dramatisch wie es klingt? Warum ist das so kritisch? Und wenn mans Singleton verwendet (wovon ich ausgehe)?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 26.08.2009, 23:53  
ak5
Benutzer
 
Registriert seit: 26.08.2009
Beiträge: 41
PHP-Kenntnisse:
Fortgeschritten
ak5 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Das funktioniert sicher für kleinere Anwendungen, bei großen Applikationen ist das ein Performance-Killer. Weiterhin entspricht es nicht dem Ansatz: "Die Komposition ist der Vererbung stehts vorzuziehen!". Du machst dich damit zu sehr von MySQLi abhängig. Was ist, wenn du später die mysqlnd_*()-Funktionen nutzen möchtest? Oder wahlweise beide in deiner Applikation zu selben Zeit?
Das ist schon vollkommen richtig. Ich ging jetzt auch von kleineren Projekten aus. Das mit der Abhängigkeit - nun ja.. Man nehme DDDBL, PDO oder irgendeine eine vergleichbare DB-Abstraktion. Mir ging es eher um die prozeduralen Funktionen.
Zitat:
Für PHP4 gibt es IMHO keine Alternative.
Da muss ich widersprechen, die Alternative gibt es schon lange: PHP5
Jetzt noch PHP4 einzusetzen halte ich für Verantwortungslos. (Falls hier davon die Rede war, dann bitte ich um Entschuldigung, das ist mir entgangen)

Gruß
ak5 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] OOP & PHP5 Buchempfehlung? boernard PHP Tipps 2009 2 26.02.2009 18:32
Einstieg in Objekt-orientierte-Programmierung (OOP) - Erste Versuche :-) echo PHP Tipps 2009 20 26.02.2009 11:08
Wer hilft mir bei OOP? echo Beitragsarchiv 27 23.02.2009 16:12
Einstieg in Objekt-orientierte-Programmierung (OOP) echo PHP Tipps 2009 50 17.02.2009 11:55
Buch für OOP homekiller PHP Tipps 2008 2 21.12.2008 16:54
[Erledigt] Von wo wird Methode aufgerufen BlackWolf PHP Tipps 2008 2 16.11.2008 16:44
Script von PHP 4 auf 5 umschreiben oder doch besser die PHP Version ändern Technikus Scriptbörse 30 28.10.2008 19:25
[Erledigt] Array aus einer Methode übergeben frank-ae PHP Tipps 2008 3 24.09.2008 12:01
[Erledigt] OOP mit PHP 5, Methode kann nicht innerhalb der class ausgeführt werden dudi PHP Tipps 2008 6 04.07.2008 00:02
Auf static Methode von variabler Klasse zugreifen Riks PHP Tipps 2007 11 16.03.2007 15:08
Methode kann Methode nicht verwenden PHP Tipps 2006 2 05.03.2006 21:30
PHP5: Klassenattribut für statische Methode, mit Vererbung PHP-Fortgeschrittene 9 24.05.2005 09:35
Methode kapseln PHP Tipps 2004 2 12.10.2004 10:53
[Erledigt] Probleme mit SESSIONS innerhalb einer METHODE PHP-Fortgeschrittene 0 26.09.2004 16:57
[Erledigt] Vokabelabfrage per Formular / Besser in PHP oder DB ? PHP Tipps 2004 5 21.08.2004 20:21

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
oop methode, oop schnittstelle erweitern, oop methoden, methode oop, methoden oop, objektorientierte programmierung methode, oop vorteile, php datenbank dependency injection, was ist oop, besserer php code, mysqli factory, methode in oop, objektorientierte programmierung methoden, wann ist oop besser, oop besser php, oop vorteile php, mysqli statement und fetch trennen, oop php methode in methode, was ist eine methode, oop methoden private

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:49 Uhr.




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