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 10.07.2011, 16:10  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard Methode einer abgeleiteten Klasse um Type Hinting ergänzen

Hallo zusammen,

gibt es eine Möglichkeit eine abstrakte Klasse zu formulieren, z.B.:

PHP-Code:
abstract class Html_Element_View_Abstract {

    public function 
render($content) {}

und bei Ableitung die Methode um Type Hinting zu ergänzen, z.B.:

PHP-Code:
class Form_Element_Text_View extends Html_Element_View_Abstract {

    public function 
render(Form_Element_Text $element) {
        
$xhtml '<input'
                    
.' name="'.$element->getName().'"'
                    
.' value="'.$element->getValue().'"'
                    
.' type="'.$element->getType().'"'
                    
.$this->_renderAttributes($element->getAttributes())
                    .
' />';
        return 
$xhtml;
    }

Im Moment erhalte ich eine Warnung, dass das gegen die Strict Standards verstoßt. Liegt hier evtl. ein Fall von klarer Misskonzeption vor?
Trainmaster ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.07.2011, 16:14  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
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

Würde mich auch mal interessieren. Aber soweit ich das sehe spezialisierst du eben die Klasse in ungültiger Weise, da Kindklassen ja trotz allem auch die Signatur ihrer Elternklasse haben und entsprechend deren Methodendeklaration nicht verändert werden darf.

Kann mich aber auch täuschen.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 10.07.2011, 16:22  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
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

Meines Erachtens nicht. Aus Interface-Sicht ist das auch sinnvoll, für den praktischen Einsatz allerdings nervig. Ich habe das irgendwo im Board schon mal angesprochen. Mein gängiger Weg ist dieser:

PHP-Code:
abstract class Html_Element_View_Abstract {

    public function 
render($content) {}



class 
Form_Element_Text_View extends Html_Element_View_Abstract {


    protected function 
checkType (Form_Element_Text $element) {}

    public function 
render($element) {
        
$this->checkType ($element);
        
$xhtml '<input'
                    
.' name="'.$element->getName().'"'
                    
.' value="'.$element->getValue().'"'
                    
.' type="'.$element->getType().'"'
                    
.$this->_renderAttributes($element->getAttributes())
                    .
' />';
        return 
$xhtml;
    }

Nicht hübsch aber wirkungsvoll.
__________________
--
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 offline   Mit Zitat antworten
Alt 10.07.2011, 16:27  
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

Hier liegt ein eindeutiger Fall von Interface-Verletzung vor, insofern ist die Warning von PHP richtig. Du kannst nicht einfach beim Überschreiben die Signatur ändern, sprich von

PHP-Code:
public function render(mixed $element){} 
auf
PHP-Code:
public function render(AnyType $element){} 
Dies muss also schon vom Interface (in diesem Fall einer abstrakten Klasse) unterstützt werden.
__________________
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   Mit Zitat antworten
Alt 10.07.2011, 16:29  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
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

@nikosch: Die Variante gefällt mir ...
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 11.07.2011, 08:04  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Oder eine protected/private Methode, die von render aufgerufen wird.
xm22 ist offline   Mit Zitat antworten
Alt 11.07.2011, 10:34  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.563
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

dr E - müsste man dann nicht durch Überladen eine weitere Funktion mit gleichem Namen erstellen können, die das gewünschte bietet .....
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 11.07.2011, 10:39  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Gibt ja keine Überladung in PHP

Geändert von xm22 (11.07.2011 um 10:53 Uhr).
xm22 ist offline   Mit Zitat antworten
Alt 11.07.2011, 10:54  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.563
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

verdammt - ich wusste, dass mir bei OOP unter PHP irgendwas fehlt .... komme halt mehr aus der Java / C# / C++ Ecke

danke xm22
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 11.07.2011, 11:04  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Ja, das habe ich auch schon des öfteren vermisst Allerdings weiß ich nicht, ob das nicht trotzdem unter das von Dr.e. angesprochene Problem fällt..
xm22 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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
İnstallation von Propel unter Windows und Ohne PEAR sysr PHP Einsteiger 4 07.02.2011 10:56
Wozu brauche ich eigentlich eine abstrakte Klasse? echo PHP Tipps 2010 28 24.11.2010 17:10
Fehlerbehandlung beim Type Hinting in Kombination mit method chaining nuna PHP Tipps 2010 5 21.05.2010 18:04
[Erledigt] MySQL Link Resource in einer statischen Variablen speichern Lenki PHP-Fortgeschrittene 8 18.03.2010 16:37
[Erledigt] AF und Type Hinting nikosch Software-Design 4 12.12.2009 14:58
auruf klassen Methode ombolo30 PHP Tipps 2009 11 09.04.2009 15:54
Wireshark SSL Handshake debugging-Handshake protokoll mittels PHP + Curl brian johnson Off-Topic Diskussionen 0 06.11.2008 11:54
Type Hinting - must be an instance of integer, integer given mAy^daY PHP Tipps 2007 1 06.03.2007 14:55
per Methode an Klassen Array Riks PHP Tipps 2007 2 06.01.2007 16:02
Problem mit Wasserzeichen auf Bildern pixelcut PHP-Fortgeschrittene 16 14.12.2004 02:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php method type hinting extends, type hinting c, type hinting, rendercontent methode., php type hinting elternklasse, php cast abstract class interface, php type hinting, type hinting php, public function render php

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:37 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