php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.12.2011, 12:34  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von jspit Beitrag anzeigen
Lt. meiner Docu darf callback kein array sein...
Ich habe doch aber einen Codeauszug aus der Doku gepostet. Und danach kann der erste Parameter der Funktion call_user_func_array ein Array sein.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist gerade online   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 08.12.2011, 12:48  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

Hab ich bereits korrigiert.., Edit2 gesehen ?
jspit ist offline   Mit Zitat antworten
Alt 08.12.2011, 12:58  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von jspit Beitrag anzeigen
Hab ich bereits korrigiert.., Edit2 gesehen ?
Grad erst nach deinem Hinweis gesehen. Ich habe vor deinem Post geprüft bzw. mal geguckt ob des übergebene überhaupt ein Objekt ist. Und zu meinem erstaunen ist es das nicht. Aber der Klassenname stimmt, denn die Exception auf der Prüfung wird nicht geworfen.

Nun verstehe ich nur nicht warum kein Objekt instanziert wird, obwohl die Schreibweise ja richtig ist.

Zumal ich das ganze jetzt mal mit einer Registry getestet habe und da haut das einwandfrei hin.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist gerade online   Mit Zitat antworten
Alt 08.12.2011, 13:28  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

PHP-Code:
     *     Enthält den Klassennamen
     
*     @var String
     
*/
    protected 
$_class
oder doch ein Object ???
Wenn es ein Name (string) ist, dann ev. so ?
PHP-Code:
$classname $this->_class;
$this->_object = new $classname(); 
Edit: Quatsch, _class ist ja keine fkt. Code geändert

Geändert von jspit (08.12.2011 um 13:41 Uhr). Grund: Code geändert
jspit ist offline   Mit Zitat antworten
Alt 08.12.2011, 13:44  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Aus deinem letzten Beitrag werde ich grad nicht wirklich schlau.

$this->_class ist ein String.

Warum noch mal ne extra Zuweisung?
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist gerade online   Mit Zitat antworten
Alt 08.12.2011, 13:53  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

Ok, ist vermutlich überflüssig. Es sah teilweise so aus, als wenn du dort ein object hast.
jspit ist offline   Mit Zitat antworten
Alt 08.12.2011, 16:10  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

PHP-Code:
protected function _initArgs($pArgs)
    {
        
$args null;
        
        if(
$pArgs !== null) {
            
$i 0;
            
$length count($pArgs);
            
            foreach(
$pArgs as $key => $value) {
                
$i++;
                
                if(
$i $length) {
                    
$args .= $value ',';
                } else {
                    
$args .= $value;
                }
            }
        }
        
        return 
$args;
    } 
digitiert zu:

PHP-Code:

protected function _initArgs( array $pArgs ) {

   return 
join(','$pArgs);


dann

PHP-Code:
protected function _createObjectInstance()
    {
        if(
$this->_path !== null) {
            require_once 
$this->_path $this->_class;
        }
        
        if(!
class_exists($this->_class)) {
            throw new 
FactoryException($this->_class ' is not a Class!');
        }

        if(
$this->_args !== null) {
            
$this->_object = new $this->_class();
            
call_user_func_array(array($this->_object'__construct'), $this->_args);
        } else {
            
$this->_object = new $this->_class();
        }
    } 
Edit:

call_user_func_array(..) an der Stelle ist sinnfrei, der Constructor wurde schon beim erstellen des Objekts aufgerufen, statt den Murks da zu kapseln übergib doch das array als optionale möglichkeit an den Constructor, oder ermögliche ein "later argument binding" per Setter nach dem erstellen der Klassen oder per Initializer-Methode die nach dem Constructor aufgerufen werden muss.

Einen Constructor 2 mal ( davon einmal sinnlos ) aufzurufen halte ich für den Falschen Weg.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (08.12.2011 um 16:49 Uhr).
tr0y ist gerade online   Mit Zitat antworten
Alt 08.12.2011, 16:58  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

Zu 1. darauf zielte meine Bemerkung mit implode..
Zu 2. $this->_args ist ein string mit Komma-sep. Parametern. Seine _class verlangt mehrere Parameter, in etwa so:
PHP-Code:
class myclass
{
    public function 
__construct($p1,$p2)
    {
      echo 
$p1."<br>";
    }
}
$args '1,2';
$obj_i= new myclass($args);  //das hier fkt. nicht, "1,2" landet in $p1 
Die letzte Variante kann auch nicht funktionieren:
PHP-Code:
call_user_func_array(array($this->_object'__construct'), $this->_args); 
anstelle von $this->_args muß da m.E. wohl ein array hin...
Kann aber nicht sagen daß ich da noch alles überblicke..
jspit ist offline   Mit Zitat antworten
Alt 08.12.2011, 17:17  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
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

Zitat:
oder ermögliche ein "later argument binding" per Setter nach dem erstellen der Klassen oder per Initializer-Methode die nach dem Constructor aufgerufen werden muss.
Eine der wenigen sinnvollen Bemerkungen in diesem langen Thread.

Hier noch paar Anmerkungen:
Warum übergibst Du die Parameter nicht erst via _createObjectInstance() und rufst diese Metrhode auch explizit auf? Eine Factory, die onConstruct bereits das Produkt erzeugt und dann so lange im Bauch trägt, bis es irgendwann mal abgerufen wird, ist relativ sinnfrei. Dann kannst Du an der stelle auch gleich
PHP-Code:
new Product (Parameter
notieren.

Also:
1. Lege den create-Prozess in der createMethode an. Übergib dort Parameter, auf die Du zum Create-Zeitpunkt zugreifen kannst. Rufe die createMethode public direkt aus dem erzeugenden Kontext auf, nicht intern in der Factory.
2. Lege im Factory-Konstruktor Parameter an, die die Factory zum Funktionieren benötigt. Z.B. eine bestehende Datenabnkverbindung, Requestparameter o.ä.
3. Lege die Produktklasse so an, dass sie nachträglich initialisiert werden kann - oder -
4. gestalte die Factory so speziell, dass Du die Anzahl der benötigten Konstruktor-Parameter kennst.
4a. Für abweichende ANforderungen an die Produktparameterisierung, leite das Factoryobjekt ab und passe die create-Methode an. Ist diese sehr komplex, lagere Teile in weitere Methoden aus, die Du dann nur überschreiben brauchst.

Zu 4: Merke: Eine (abstrakte) Factory ist dafür gedacht (!) nahe am Produkt, also quasi abhängig von dessen Signatur zu sein. Sie ist speziell, damit der Erzeugungskontext allgemein gehalten sein kann.
__________________
--
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 08.12.2011, 17:26  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Das Constructor gefrickel endet übrigens irgendwann im Chaos:

PHP-Code:
<?php

class test {
   public function 
__construct$a$b null$c null$d null ) {
      
$inbound func_get_args(); array_shift($inbound);
      if ( 
is_array($a) &&  ( count(array_keys($inboundnulltrue)) == || count($inbound) == ) ) {
         if ( isset(
$a['a'], $a['b'], $a['c'], $a['d']) ) {
            
$b $a['b']; $c $a['c']; $d $a['d']; $a $a['a'];
         }
      }
      
      echo 
$a.' - '.$b.' - '.$c.' - '.$d;
   }
}


new 
test(array('a' => 'hello''b' => 'world''c' => 'how are''d' => 'you?'));
new 
test('hello''world''how are''you?');
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist gerade online   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
Array werte zusammen rechnen fabi288 PHP Einsteiger 13 03.01.2011 16:08
mehrdimensionales array inhalte tauschen pidaman PHP Tipps 2010 18 27.08.2010 16:58
[Erledigt] Bereich einer Array lässt sich nicht ausgeben Polliny PHP Tipps 2010 54 21.06.2010 15:30
Feed in Datenbank eintragen (Formate: json, php serialized, xml) high_five Datenbanken 5 17.06.2010 03:04
[Erledigt] Sortierung mehrerer Arrays philosapiens PHP Tipps 2010 16 08.06.2010 05:22
Ein (Teil)Array anhand von level und depth zurückgeben. greatcthulhu Scriptbörse 4 16.04.2010 10:45
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
PHPLot von der Datenbank zum mehrdimensionalen Array mannimammut PHP Tipps 2009 1 15.12.2009 10:40
merge Array? tommy_725 PHP Tipps 2009 3 07.08.2009 18:30
[Erledigt] array sortieren PHP Tipps 2004 17 13.05.2009 10:44
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
bbcode - Classe PHP-Fortgeschrittene 4 18.09.2004 17:30


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