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 Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 25-06-2011, 17:31
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard dynamische Klasseneigenschaften

Hi,

meine Datenbank ist so aufgebaut, das man jederzeit einem Produkt weitere Eigenschaften zuordnen kann, ohne an der Struktur was zu ändern.

Ich würde das gern in eine Klasse übertragen. Wird eine neue Eigenschaft hinugefügt, will ich aber nicht jedesmal die Klasse erweitern:

PHP-Code:
public function getProperty($name){
  return 
$this->$name;

Es gibt aber auch viele Eigenschaften, wo jeweils nur ein boolean zurückgegeben wird. Dann sollte die Bezeichnung nicht getProperty sondern hasProperty sein. Gibt es dafür eine Lösung, also dynamisch Attribute der Klasse hinzuzufügen und jeweils andere Mehodenbezeichnungen zu verwenden?

Mein erster Gedanke war, einfach analog zu getProperty eine weitere Methode hasProperty anzulegen und dann (z.B. bei der Ausgabe der Werte ) einfach die eine oder andere Methode zu verwenden?

Farbe --> getProperty('color');
Klimaanlage --> hasProperty('aircondition');

wobei man jeden Wert auch mit der jeweils anderen Funktion bekommen könnte.

Oder ist es generell besser, wirklich für jede Eigenschaft eine Methode zu haben? Beim Hinzufügen von neuen Eigenschaften muss mann dann die Klasse anpassen. Mein obiges Problem würde dann nicht mehr bestehen.
Mit Zitat antworten
  #2 (permalink)  
Alt 25-06-2011, 17:43
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Die Sache ist, dass zu viel "Magie" den Code schwer verständlich macht und zu manch Überraschungen führt. Außerdem unterstützen IDEs keine magischen Methoden/Eigenschaften beim Autocomplete, wodurch natürlich auch ein gewisser Komfort für den Programmierer verloren geht.

Außerdem spricht dies nicht gerade für dein Datenbankdesign, wenn eine Änderung der Daten auch eine Code-Änderung erfordert. Normalerweise sollte der Code selber von den Daten unabhängig sein.

Dein Ansatz mit ->getProperty($property) und ->hasProperty($property) sieht vernünftig aus, aber ich verstehe nicht, warum du für jeden Wert eine andere Funktion benötigst? Woher kommen die Properties überhaupt? Sind die dynamisch oder statisch? Wenn sie statisch sind, mach doch auch explizit Funktionen dafür.

Zitat:
Zitat von lx-club Beitrag anzeigen
Oder ist es generell besser, wirklich für jede Eigenschaft eine Methode zu haben? Beim Hinzufügen von neuen Eigenschaften muss mann dann die Klasse anpassen. Mein obiges Problem würde dann nicht mehr bestehen.
Wo ist das Problem? So oft sollte die Datenbankstruktur nicht geändert werden, dass dies zu einer großen Arbeit wird. Warum tut dir das weh, wenn du (Hausnummer) einmal im Monat eine Klasse anpasst?

Geändert von h3ll (25-06-2011 um 17:49 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 25-06-2011, 17:51
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Die magische Variante:
Du könntest das ArrayAccess Interface implementieren.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #4 (permalink)  
Alt 25-06-2011, 17:52
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

ich hatte mir zum Design hier im Forum auch etws Rat geholt und da auch super Hilfe bekommen. Das Design der DB ist schon ok:

produkte:
- id
- name

eigenschaft:
- id
- name

wert:
- produkt_id
- eigenschaft_id
- wert

Somit kann ich ja ganz flexibel neue Eigenschaften hinzufügen.

Ich möchte eigentlich nur verschiedene Bezeichnungen nutzen, um den Code verständlich und lesbar zu machen. Es ist doch besser
PHP-Code:
if ($product->hasProperty('aircondition'))

als

if ($product->getProperty('aircondition')) 
zu schreiben, finde ich. has / is jeweils für Methoden, die einen boolean zurückgeben, ansonsten get
Mit Zitat antworten
  #5 (permalink)  
Alt 25-06-2011, 17:55
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

PHP-Code:
// magisch 
if ($product->offsetExists('aircondition'))
  
tuwas(); 
__________________
Wir werden alle sterben

Geändert von combie (25-06-2011 um 17:57 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 25-06-2011, 17:59
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

was spricht gegen

PHP-Code:
if($product['aircondition']) 
EDIT:
isset ist glaube ich an der stelle falsch, der wert kann ja auch false sein, wo isset aber immernoch true liefern würde.
Also
PHP-Code:
if(isset($product['aircondition']) && $product['aircondition']) 


EDIT:
okay, isset wurde schonwieder weggenommen
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #7 (permalink)  
Alt 25-06-2011, 18:00
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Woher kommen die Properties überhaupt? Sind die dynamisch oder statisch? Wenn sie statisch sind, mach doch auch explizit Funktionen dafür.
Ich mache eine DB-Abfrage und dann wird ein Array erstellt, was an die Klasse übergeben wird.

Zitat:
Zitat von h3ll Beitrag anzeigen

Wo ist das Problem? So oft sollte die Datenbankstruktur nicht geändert werden, dass dies zu einer großen Arbeit wird. Warum tut dir das weh, wenn du (Hausnummer) einmal im Monat eine Klasse anpasst?
Es ist ja eigenltich kein richtiges Problem, nur wollte ich noch sowas in der Art machen, das man ein Formular hat und jeweils neue Eigenschaften dort hinzufügt. Dann steht diese in der DB, aber ich muss auch in der Klasse die entsprechenden Eigenschaften setzen
Mit Zitat antworten
  #8 (permalink)  
Alt 25-06-2011, 18:04
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

BTW: Dein Titel nennt sich "dynamische Klasseneigenschaften". Das sähe dann so aus:

PHP-Code:
function konstruktor(array $properties)
{
  foreach(
$properties as $p => $v)
    
$this->$p $v;

__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #9 (permalink)  
Alt 25-06-2011, 18:15
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von TobiaZ Beitrag anzeigen
BTW: Dein Titel nennt sich "dynamische Klasseneigenschaften". Das sähe dann so aus:

PHP-Code:
function konstruktor(array $properties)
{
  foreach(
$properties as $p => $v)
    
$this->$p $v;

Hatte ich so genannt, da ich ja nicht jede neue Eigenschaft extra aufschreiben wollte. So ähnlich habe ich es jetzt auch, wie im Codebeispiel

PHP-Code:
function konstruktor(array $properties)
{
  foreach(
$properties as $p => $v)
    
$this->setProperty($p,$v);

So kann man einfach neue Eigenschaften hinzufügen, ohne an der Klasse was zu ändern.

Zur besseren Lesbarkeit wollte ich halt bei Methoden die nur einen boolean zurückgeben einfach hasProperty schreiben, sonst getProperty. DEswegne wolltei ch beide Methodne anlegen und im Tempate jeweils die geeignete nehmen

Geändert von lx-club (25-06-2011 um 18:19 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP (dynamische Webseite) Kibts PHP Developer Forum 5 12-07-2007 17:31
Dynamische Tabelle phowe PHP Developer Forum 1 17-11-2004 10:56
[GD] Dynamische Speisekarte KaiUwe PHP Developer Forum 1 24-10-2004 14:28
dynamische ip yard Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 7 29-04-2004 18:06
dynamische pop-up mister_x1 HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 5 13-11-2003 11:56

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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:08 Uhr.