php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.03.2007, 17:42  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard Funktion createObject

In gerade dabei wieder mal etwas in OOP zu machen. Dazu benötige ich
jede Menge "Schnittstellen" zwischen dem "normalen" und dem "OOP
Code". Ich habe mich nicht lange umgeschaut ob es so etwas wie die Funktion schon gibt, sondern einfach losgelegt. Im Prinzip ist das ja eine sehr einfache Funktion. Mich interessiert im Wesentlichen ob ich etwas
wichtiges vergessen habe oder in der Zukunft vielleicht doch mit Problemen rechnen muss oder wie und ob man das noch optimieren kann.

Mir geht es also in erster Line darum etwas zu lernen und von diesem
recht einfachem Code auf meinen anderen Kram zu schließen.

Wenn das nicht erwünscht einfach mal bescheid sagen.

PHP-Code:
<?php
function createObject($row$take_key=false$value_name='value'$text_name='text'){
     if(!
is_object($row)) {
         
$obj = new stdClass;
         if(
is_array($row)){
             
$obj_array = array();
             foreach(
$row as $key => $value) {
                
$obj->$value_name     $take_key $key trim($value);
                
$obj->$text_name      trim($value);
                
$obj_array[$key]     = $obj
             }
             return 
$obj_array;
         } else {
                
$obj->$value_name     trim($row);
                
$obj->$text_name      trim($row);    
                return 
$obj;
         }
     }
     return 
$row;
 }
?>
Grüße
Tine
tinchen ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 08.03.2007, 17:57  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Du möchtest aus einem eindimensionalen assoziativen Array ein Objekt machen? Wozu? Mach es doch lieber gleich beim Erstellen zum Objekt (statt mysql_fetch_assoc zB mysql_fetch_object) verwenden.

Würde ich aber nicht. Ich benutze auch noch haufenweise eindimensionale Arrays. Finde man kann da keine Wertung pro oder kontra für geben.
Die explizite nachträgliche Umwandlung finde ich aber nicht sehr sinnvoll (wo ist der Mehrwert?).
Zergling-new ist offline  
Alt 08.03.2007, 18:07  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Weil ich es hier als selected reingeben möchte.
Aus einem normalem array z.B.

PHP-Code:
<?php
function createSelectList( &$arr$tag_name$tag_attribs$key$text$selected=NULL ) {
        
// check if array
        
if ( is_array$arr ) ) {
            
reset$arr );
        }
        
        
$html     "\n<select name=\"$tag_name\" $tag_attribs>";
        
$count     count$arr );
        
        for (
$i=0$n=$count$i $n$i++ ) {
            
$k $arr[$i]->$key;
            
$t $arr[$i]->$text;
            
$id = ( isset($arr[$i]->id) ? @$arr[$i]->id null);

            
$extra '';
            
$extra .= $id " id=\"" $arr[$i]->id "\"" '';
            if (
is_array$selected )) {
                foreach (
$selected as $obj) {
                    
$k2 $obj->$key;
                    if (
$k == $k2) {
                        
$extra .= " selected=\"selected\"";
                        break;
                    }
                }
            } else {
                
$extra .= ($k == $selected " selected=\"selected\"" '');
            }
            
$html .= "\n\t<option value=\"".$k."\"$extra>" $t "</option>";
        }
        
$html .= "\n</select>\n";
        
        return 
$html;
    }
?>
Soweit meine Idee.
tinchen ist offline  
Alt 08.03.2007, 20:57  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Die sieht aber kompliziert aus
Zergling-new ist offline  
Alt 08.03.2007, 21:10  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

Ja, sieht kompliziert aus! Hab auch ehrlichgesagt nicht richtig verstanden, was Du da mit Objekten machen willst! (Aber das heißt nichts. *g)

Kannst Du mal ein paar verständnisrelevante Typehints einbauen, was jetzt was sein soll?
pepe24 ist offline  
Alt 08.03.2007, 23:29  
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

Hallo tinchen,

wenn das ein Select-Feld-Handler werden sol ist das für mich der falsche Ansatz, da du hier schon zu speziell bist und keine generischen Attribute zulässt.
__________________
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 08.03.2007, 23:39  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Das sieht kompliziert aus?
Finde ich persönlich nicht. Allerdings ist diese Funktion nicht von mir. Diese
ist Teil eines objektorientiertem Frameworks. Meine Funktion ermöglich es lediglich
einen ganz normales Array als $selected in die Function zu geben. Nicht immer
kommen diese Daten aus einem DB-Select. Allerdings ist es eigentlich so vorgesehen.

Die Funktion ist doch ganz einfach. $arr als array mit zwei Objekten rein, und
den Rest befüllen schon gibt es eine HTML Select List zurück. Auch wenn die
Funktion vielleicht nicht wunderschön ist, geht es mir darum im Framework
möglichst wenig zu ändern, so muss ich mir Lösungen einfallen lassen.
Ein mögliches Update soll ja nicht in einem Desaster enden.

@dr.e.
Zitat:
da du hier schon zu speziell bist und keine generischen Attribute zulässt
Kannst du mal ein Beispiel geben?

Grüße
Tine
tinchen ist offline  
Alt 09.03.2007, 08:28  
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

Hallo tinchen,

ich hatte mal in irgendeinem Tread auf meine Beispiel-Webseite verwiesen. In dieser steckt einiges drin. Für die Präsentations-Schicht kann ich mir damit Templates bauen, die Forms und Form-Elemente enthalten (http://reiner.zierpflanzenberatung.d..._webseite.zip; Dort siehst du dir die Templates unter modules/kontakt[x] an).

Das sieht ungefähr so aus:

Code:
<html:form name="Kontakt" method="post" action="">
  

  <span style="width: 47px; border: 0px solid black; margin-right: 71px;">Person:</span><form:select name="Empfaenger" class="eingabe_feld" />
  

  

  <span style="width: 56x; border: 0px solid black; margin-right: 64px;">Ihr Name:</span><form:text name="AbsenderName" class="eingabe_feld" style="width: 280px;" validate="true" button="KontaktSenden" />
  

  

  <span style="width: 108px; border: 0px solid black; margin-right: 10px;">Ihre eMail-Adresse:</span><form:text name="AbsenderAdresse" class="eingabe_feld" style="width: 280px;" validate="true" validator="EMail" button="KontaktSenden" />
  

  

  <span style="width: 57px; border: 0px solid black; margin-right: 61px;">Ihr Betreff:</span><form:text name="Betreff" class="eingabe_feld" style="width: 280px;" validate="true" button="KontaktSenden" />
  

  

  Ihre Nachricht:
  

  <form:text name="Text" class="eingabe_feld" style="height: 200px; width: 400px; overflow: auto;" validate="true" button="KontaktSenden" />
  

  

  <form:button name="KontaktSenden" value="Senden" class="eingabe_feld" style="margin-left: 332px;" />
</html:form>
Im zugehörigen Controller kann ich dann wie folgt auf das Select-Feld reagieren:

PHP-Code:
<?php
         
// Referenz auf die Form holen
         
$Form = & $this->__getForm('Kontakt');


         
// Action setzen
         
$Form->setAttribute('action',$_SERVER['REQUEST_URI']);


         
// Auswahlfeld Person
         
$Recipients = & $Form->getFormElementByName('Empfaenger');

         
// Recipients laden
         
$cM = &$this->getServiceObject('modules::kontakt4::biz','contactManager');
         echo 
printObject($cM);
         
$Recipients $cM->loadRecipients();

         for(
$i 0$i count($Recipients); $i++){

            if(
$this->_LOCALS['Empfaenger'] == $Recipients[$i]->get('oID')){
               
$Recipients->addOption($Recipients[$i]->get('Name'),$Recipients[$i]->get('oID'),true);
             
// end if
            
}
            else{
               
$Recipients->addOption($Recipients[$i]->get('Name'),$Recipients[$i]->get('oID'));
             
// end else
            
}

          
// end if
         
}
?>
Damit kannst du im Template so viele Attribute für das Select-Feld vergeben, wie du möchtest und hast trotzdem die Möglichkeit das Formular - hier das Select-Feld - so zu füllen, wie du es gerne möchtest. Alles andere ist nicht generisch und hat irgendwann mal seine Grenzen.

Solltest du noch Fragen haben, kannst du dir entweder die Beispielseite runterladen, irgendwo unter deinem Apachen hin und das mal ausführen, oder mich Fragen.

BTW: Das Symphony-Framework ist diesbezüglich auch so ungenerisch - grausam.
__________________
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 09.03.2007, 16:44  
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

Hallo tinchen,

ist angekommen, was ich meine?
__________________
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 10.03.2007, 11:33  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Die Ungeduld spricht.
Ich bin mir noch nicht zu 100% sicher. Zunächst sagt mir der Begriff "generisch"
nicht viel. Auch eine google Suche liefert eher unbefriedigende Ergebnisse.

Dein Beispiel bringt mich zunächst nicht viel weiter, weil ich irgendwie den
Zusammenhang noch nicht sehe.

Grüße
Tine
tinchen 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
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
gpc_quotes funktion: verbesserungsvorschläge? Promaetheus PHP Tipps 2007 10 12.08.2007 19:29
variable in funktion JanM PHP Tipps 2006 2 23.07.2006 20:06
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
In einer Funktion auf eine Funktion der Klasse zugreifen phpbeginner PHP Tipps 2005-2 2 28.07.2005 00:30
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Array-Übergabe in Funktion PHP Tipps 2005 1 08.05.2005 21:05
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
[Erledigt] Funktion in funktion nicht möglich? PHP-Fortgeschrittene 4 28.11.2004 00:14
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
[Erledigt] Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php create object, php createobject, create object php, php create object function, php function create object

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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.