php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.02.2010, 01:23  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Get es hier nur um ganz einfache setter und getter ? die alle im grund gleich sind ? Oder enthalten die auch unterschiedliche Validierung/Filterung/Castings, etc ?

Also sehen die alle so aus:
PHP-Code:
public function setFoo($foo) {
$this->_foo $foo;
return 
$this;
}
public function 
getFoo()
{
return 
$this->_foo;

Wenn ja, verstehe ich nicht warum du nicht __call mit einem generischen setter nutzt, du sparst dir einen haufen arbeit, test-aufwand, viel weniger code und der performance-verlust dürfte recht gering sein.

Einfach intern in der Klasse ein array, ein generischer setter:
PHP-Code:
class Foo {
protected 
$_existingProperties = array('foo' => 'foo''baa' => 'baa');
protected 
$_properties = array();
protected function 
_genericSetter($name$value)
{
    
$this->_properties[$name] = $value;
    return 
$this;
}

public function 
__call($method$params)
{
    
/*
    falls $method mit set anfängt schauen ob das was danach kommt in $this->_existingProperties vorhanden ist (wenn du indizes benutzt kannst du direkt isset nutzen, ansonsten muss die langsamere variante mit in_array() herhalten) 
und dann via return call_user_func_array(array($this, '_genericSetter'), $params); ausführen
*/
// ... get...

// ansonsten exception schmeißen.
}

Dazu dann halt noch das gleiche für den getter.

Und für die Code-Completion kannst du dann mit @property/@method arbeiten und keiner merkts solange er nicht in den quellcode schaut

Für DRY ist das definitiv ein gutes Stück besser.
robo47 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 16.02.2010, 22:29  
Neuer Benutzer
 
Registriert seit: 29.07.2009
Beiträge: 17
PHP-Kenntnisse:
Fortgeschritten
raw-venture-ad befindet sich auf einem aufstrebenden Ast
Standard

Alle Paragraphen sind bei meiner Klasse (PHPWord) vom Typ PHPWord_Section_Text und haben eine eigenschaft style die eine Instanz der Klasse PHPWord_Style_Text beinhaltet. Bei Listen und Tabellen nutze ich dann die gleiche Klasse.

Ich habe es bei PHPWord dann so gemacht, dass ich einem Paragraph entweder ein Array mit Style-Attributen übergebe...

PHP-Code:
$section->addText('Lorem ipsum ...', array('color'=>'006699')); 
...oder einen String der auf eine Style Eigenschaft in der styles.xml zeigt:

PHP-Code:
$PHPWord->addTextStyle('Factory_CICD', array('color'=>'006699''size'=>18'spaceBefore'=>60));
$section->addText('Lorem ipsum...''Factory_CICD'); 
Da die Eigenschaften alle private sind, kann man alternativ auch über getter/setter die entsprechenden Werte setzen:

PHP-Code:
$paragraph $section->addText('Lorem ipsum...');
$paragraph->setName('Arial');
$paragraph->setBold();
$paragraph->setColor('006699'); 
raw-venture-ad ist offline   Mit Zitat antworten
Alt 16.02.2010, 23:41  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.069
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Du "musst" dabei aber unterscheiden zwischen Formatvorlagen und Inlinestyles. Ich kann ja einem Paragraphen eine Formatvorlage zuweisen, die den Text fett macht, dieses "fett" dann aber per Inline wieder wegnehmen.

Ala:
<span class="bold_text" style="font-weight:normal">..</span>

So abwegig ist das auch nicht mal. Deshalb will ich das schon unterscheiden.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 17.02.2010, 09:13  
Neuer Benutzer
 
Registriert seit: 29.07.2009
Beiträge: 17
PHP-Kenntnisse:
Fortgeschritten
raw-venture-ad befindet sich auf einem aufstrebenden Ast
Standard

Ja, genau !

Diese Unterscheidung mache ich auch indem der Konstruktor von PHPWord_Section_Text prüft ob ein style-array (führt zur inline Formatierung) oder ein Formatvorlagen-String übergeben wurde. Alle Formatvorlagen stehen in einer statischen Klasse und können daher auch auf ihre Existenz geprüft werden.

Dem entsprechend wird dann entweder ein <w: pStyle id="MeinFormat" /> oder ein <w:rPr>...</w:rPr> geschrieben.
raw-venture-ad ist offline   Mit Zitat antworten
Antwort


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

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
phpword_section_text, php dry, php mehrfachvererbung, mehrfachvererbung php, phpword_section_text::setname(), phpword setbold(), phpword phpword_section_text::setbold(), klasse besteht nur aus setter und getter, phpword_section_text::setbold(), phpword_section_text::setbold() in, dry software design, mehrfachvererbungen php, programme mit mehrfachvererbung weniger performant, eigenschafts getter setter auf deutsch

Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 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