php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 19-10-2009, 18:24
Lalelu
 Registrierter Benutzer
Links : Onlinestatus : Lalelu ist offline
Registriert seit: Oct 2009
Beiträge: 1
Lalelu befindet sich auf einem aufstrebenden Ast
Lightbulb [gelöst] Anfängerfragen OOP

Hallo, ich bin gerade dabei mich in OOP einzuarbeiten, wobei sich einige Fragen bei mir aufgetan haben.

Frage 1:
Wie ich gelesen habe, werden zu Beginn in einer Klasse alle Eigenschaften eines Objektes angegeben. In einem Konstruktor werden diesen Eigenschaften dann Werte zugewiesen. Aber irgendwie seh ich den Sinn dahinter nicht ganz. Hab mal versucht, eine Klasse für eine User-Registrierung zu erstellen, was soweit auch funktioniert. Wenn ich aber die ganzen Eigenschaften (private $vorname, private $nachname, ...) am Anfang rauslösch, funktioniert das alles trotzdem noch so wie es soll. Wozu ist dann die Auflistung gut, was bringt mir das? Nur um die Eigenschaften als private/public/protected zu deklarieren? Würden die dann wenn ich auf die Auflistung am Anfang verzichten würde quasi alle automatisch auf public stehen? Oder hat die Auflistung noch irgendwie eine andere Bewandnis? Also hier mal der Anfangsteil zum besseren Verständnis:

PHP-Code:
class User
{
  private 
$vorname;
  private 
$nachname;
  private 
$email;
  private 
$username;
  private 
$passwort;

  public function 
__construct($userdaten){
  
$this->vorname $userdaten[0];
  
$this->nachname $userdaten[1];
  
$this->email $userdaten[2];
  
$this->username $userdaten[3];
  
$this->passwort $userdaten[4];
  }

  ...
  ...


Frage 2:
Angenommen ich möchte in die Klasse nun auch Methoden zum Login/Logout einfügen. Da brauch ich ja als Eigenschaften nur Username und Passwort. Im Konstruktor könnt ich ja dann durch eine if-Bedingung rausfinden, ob sich ein User registrieren oder einloggen will und demnach entscheiden, ob nur dem Usernamen und Passwort Werte zugewiesen werden oder auch Vorname, Nachname und Email. Was mach ich dann aber mit den Eigenschaften am Anfang der Klasse (die Dinger mit dem private davor)? Kann ich die einfach so alle stehen lassen obwohl einige im Falle eines Logins nicht gefüllt bzw. genutzt werden oder wie ist das?

Frage 3:

Muss man jedes Mal, wenn man einen Konstruktor erstellt hat auch einen Destruktor erstellen oder ist das optional? Hinter den Sinn so eines Destruktors bin ich auch noch nicht so ganz gestiegen...

Frage 4:
Ich hab mal gehört, in Methoden soll man kein echo verwenden. Weiß einer den Grund dafür?


Fragen über Fragen... Hoffe ihr könnt mir helfen!
Mit Zitat antworten
  #2 (permalink)  
Alt 19-10-2009, 18:35
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

1. ja
2. unsinn
3. jain
4. ja
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 19-10-2009, 20:45
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von Lalelu Beitrag anzeigen
Frage 1:
Wenn ich aber die ganzen Eigenschaften (private $vorname, private $nachname, ...) am Anfang rauslösch, funktioniert das alles trotzdem noch so wie es soll. Wozu ist dann die Auflistung gut, was bringt mir das? Nur um die Eigenschaften als private/public/protected zu deklarieren? Würden die dann wenn ich auf die Auflistung am Anfang verzichten würde quasi alle automatisch auf public stehen?
Ja, ohne explizites Auflisten kannst du die Sichtbarkeit der Properties nicht angeben und dann sind sie alle public. Außerdem hätte man keine Code Completion der Properties und nicht zuletzt ist es einfach eine Frage der Wartbarkeit.
Zitat:
Frage 2:
Angenommen ich möchte in die Klasse nun auch Methoden zum Login/Logout einfügen. Da brauch ich ja als Eigenschaften nur Username und Passwort. Im Konstruktor könnt ich ja dann durch eine if-Bedingung rausfinden, ob sich ein User registrieren oder einloggen will ...
Das mag in deinem Fall grad so sein, aber generell kann man nicht davon ausgehen, dass man im Konstruktor schon irgendwas weiß. Man initialisiert das Objekt erstmal blanko, d.h. solche Properties wie Username und Passwort werden mit leeren Strings oder NULL belegt.
Sollte dem Konstruktor eine User-Id übergeben werden, kannst du die minimal benötigten Daten laden oder mehr als diese oder gleich alle. Was eben am sinnvollsten ist.
Zitat:
Frage 3:
Muss man jedes Mal, wenn man einen Konstruktor erstellt hat auch einen Destruktor erstellen oder ist das optional? Hinter den Sinn so eines Destruktors bin ich auch noch nicht so ganz gestiegen...
Der Sinn eines Destruktors ist, beim Abräumen des Objekts aufzuräumen. Es wäre zum Beispiel denkbar, dass so ein User-Objekt während der Laufzeit verändert wurde. Der User hat sein Passwort geändert oder so. Das Objekt mehr sich intern, dass diese Änderung noch nicht persistent ist, also zum Beispiel noch nicht in der Datenbank gespeichert wurde. Wird jetzt das Objekt vom Speicher entfernt, wird kurz zuvor der Destruktor aufgerufen und schreibt die Änderungen in die DB.*
Wenn im Destruktor gar nichts zu tun wäre, muss er auch nicht implementiert werden. Das dass Objekt aus dem Speicher verschwindet, darum kümmert sich PHP schon selbst, spätestens beim Beenden des Skripts.
Zitat:
Frage 4:
Ich hab mal gehört, in Methoden soll man kein echo verwenden. Weiß einer den Grund dafür?
Wenn Methoden direkt Ausgaben erzeugen, sprechen sie quasi mit dem Browser. Aber das sollen sie nicht, sie sollen mit ihrem Aufrufer sprechen. Das heißt, sie sollen die zu erzeugende Ausgabe als String zurückgeben. Nur so läßt sich eine saubere Trennung zwischen Eingabe, Verarbeitung und Ausgabe erreichen. Wenn in einer objektorientierten Applikation jedes Objekt nach Belieben Ausgaben erzeugt, ist das meist ein deutliches Zeichen dafür, dass lediglich zusammengehörige Funktionen mit einem class{} umschlossen wurden. Ein echtes Objekt bildet aber eine Entität mit in sich konsistentem Verhalten und deutlich abgrenzbaren Zweck.

Üben, üben, üben ... und immer wieder andere draufschauen lassen.


*) Das ist nur ein Beispiel. Da Destruktoren u.U. erst beim Beenden des Skripts laufen, besteht die DB-Verbindung vielleicht schon gar nicht mehr.

Geändert von onemorenerd (19-10-2009 um 20:48 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 22-10-2009, 18:35
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von combie Beitrag anzeigen
...
4. ja
Ist das jetzt so eine typische Hacker-Antwort?
"Ja", es gibt mindestens einen, der den Grund dafür weiß.

Oder ging es dir darum, dass Memberfunktionen besser nicht in die Ausgabe schreiben sollten? Dann hättest du aber dem OP zumindest auch darauf hinweisen können, dass es neben echo() noch eine ganze Menge andere Ausgabefunktionen wie print(), printf() oder vprintf() gibt. Sonst sieht das so aus, als ob nur die Verwendung echo() "böse" wäre.

Ich würde übrigens die vierte Frage mit "kommt darauf an" beantworten. Irgendwo muss man die gesammelten Bytes schließlich mal ausgeben.
Mit Zitat antworten
  #5 (permalink)  
Alt 22-10-2009, 18:53
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Weiß einer den Grund dafür?
Ja!
Ich kenne den Grund warum ich das nicht (oder nur ganz ganz selten) tue! Onemorenerd hat ihn sehr gut beschrieben. Dem gibt es nichts mehr hinzuzufügen.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #6 (permalink)  
Alt 22-10-2009, 18:58
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Ich hab aus Spaß grade mal geschaut. In einer von mir entwickelten Abart des Zend Frameworks kommen 9 echo's vor. Alle auskommentiert … im ZF finden sich allerdings per default einige.

Ich gehe sogar so weit, dass man komplett ohne "echo" arbeiten kann, wenn man will. Aber Zeitdruck, Faulheit und Frustration sind eben nicht immer im Keller
Mit Zitat antworten
  #7 (permalink)  
Alt 22-10-2009, 19:11
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Echos sind an sich nicht böse...
Aber in Methoden haben sie selten was zu suchen.
Ausnahme im V des MVC

Selbst in Funktionen ist ein echo meist unnötig einschränkend.
PHP-Code:
function mul_a($a,$b
{
  echo 
$a*$b// böse
}

function 
mul_b($a,$b
{
  return 
$a*$b// gut
}

mul_a(1,2);// böse
echo '<br>';
echo 
mul_b(1,2);// gut 
mul_a ist böse weil sich die Rückgabe nicht weiterverarbeiten lässt.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #8 (permalink)  
Alt 24-10-2009, 00:01
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Außerdem werden Unit Tests ziemlich aufwändig, wenn nicht sogar unmöglich, wenn alles mit echo ausgegeben wird.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
destruktor, echo, eigenschaften, konstruktor, oop


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP5] Anfängerfragen zu session's aXu PHP Developer Forum 14 07-11-2007 15:23
Generelle Anfängerfragen dyter07 PHP Developer Forum 3 11-02-2006 13:10
Anfängerfragen abenstex HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 6 10-10-2005 19:40
VBA und und Anfängerfragen Aurelius ASP, PERL, CGI, C und alles andere 1 02-08-2004 09:19
Ein Haufen Anfängerfragen syco23 PHP Developer Forum 20 08-07-2003 12:20

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:21 Uhr.