Assoziative Arrays und Variablen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP-Desaster
    replied
    Originally posted by piratos View Post
    den ganz offenbar bestand ja die Aufgabe darin eine globale Variable inhaltlich zu verändern.
    Woran du das festmachst, würde mich mal interessieren. Davon hat der TO doch nie etwas gesagt.
    Aber nun, warten wir erstmal auf die Rückmeldung durch letzteren.

    Leave a comment:


  • onemorenerd
    replied
    Du hast das Problem des TO (Murks in $id) gar nicht verstanden sondern ein ganz anderes Problem (Scope von $userconfig) hinein interpretiert. Mit dem Scoping ist doch alles in Ordnung soweit wir das beurteilen können.

    Im ersten Beitrag hat der TO die umgebende Funktion nicht mit gepostet. Später schon. Du hast im ersten Beitrag globalen Scope gesehen und beim zweiten Beitrag angenommen, $userconfig soll _zusätzlich_ in einer Funktion bearbeitet werden. Soll es aber nicht. Diese Variable gibt es vielleicht _nur_ in der Funktion.
    Und die Funktion ist vielleicht eine Methode in einer Klasse in einem Namespace ... also immer schön vorsichtig mit Annahmen über Scopes. Ich sehe im ersten Beitrag keinen globalen Scope sondern (spätestens in Kombination mit dem zweiten Beitrag) fehlende Informationen über den Kontext.
    Last edited by onemorenerd; 17-07-2009, 13:57.

    Leave a comment:


  • piratos
    Guest replied
    Langer Rede kurzer Sinn, schliesslich kommt es darauf ein eine Lösung anzubieten und das habe ich (und ihr ?).

    Global hin und global her, wer weiss was er bei der Nutzung macht kann Vorteile daraus ziehen und das bedeutet ja auch nicht das man das überall so machen wird.

    Es ist keine Geschmackssache, war hier aber im Zusammenhang mit dem Hinweis auf das Manual (Scope) sinnvoll, den ganz offenbar bestand ja die Aufgabe darin eine globale Variable inhaltlich zu verändern.

    Leave a comment:


  • onemorenerd
    replied
    Originally posted by piratos View Post
    Es kommt zuerst drauf an den betreffenden User darauf hinzuweisen das die Var ausserhalb des Scopes liegt (hat aber keiner bis auf meine Kleinigkeit).
    Tut sie gar nicht. Das nimmst du nur an.

    Für Leute die sich wegen global oder nicht schütteln kann man es auch so machen
    Für dich scheint es Geschmackssache zu sein. Ist es aber nicht. global ist Mist und das sieht jeder so, der weiß was er tut. Ich kann dir aus dem Stand Beispiele geben wo du mit global gehörig gegen die Wand fährst. Nicht weil der Code nicht funktionieren würde, sondern weil er unwartbar wird. Denn wenn ich eine Funktion aufrufe, erwarte ich, dass sie mit den Eingaben irgendwas macht und mir ggf. etwas zurückgibt. Vielleicht macht sie auch eine Ausgabe. Aber sie ändert nichts außerhalb ihres Scopes. Das ist sozusagen Gesetz. Sonst hast du nämlich als Programmierer überhaupt keine Ahnung mehr was im globalen Scope los ist.

    Leave a comment:


  • piratos
    Guest replied
    Es kommt zuerst drauf an den betreffenden User darauf hinzuweisen das die Var ausserhalb des Scopes liegt (hat aber keiner bis auf meine Kleinigkeit).

    Für Leute die sich wegen global oder nicht schütteln kann man es auch so machen:

    PHP Code:
    <?php
     $id
    =0// default
        
    $userconfig = array(
        
    'overwrite_cache' => 'off',                 //Cache bei jedem Aufruf neu erstellen: on = an, off = aus 
        
    'pic_image_quality' => 90,                  //Bildqualitaet: 0 = schlechteste , 100 = beste
        
    'show_metadata_iptc' => 'on',               //IPTC-Ausgabe: on = an, off = aus
        
    'show_metadata_exif' => 'off',              //EXIF-Ausgabe: on = an, off = aus 
        
    'dir_cache' => dirname(__FILE__).'/../img/news/'.$id.'/cache',          //Pfad zum Cache Verzeichnis
        
    'dir_upload' => dirname(__FILE__).'/../img/news/'.$id,        //Pfad zum Upload Verzeichnis
        
    'http_method' => 'GET',                     //Uebermittlungsmethode der Query-Variable: PATHINFO oder GET
        
    'http_var_name' => 'q',                     //Name der Query-Variablen die per http_method uebergeben wird
        
    'response_type' => 'json'                   //Art der Antwort: direkt = json, include = php
    );  
    function 
    news_content($id,$config)


            
    $config['dir_cache']= dirname(__FILE__).'/../img/news/'.$id.'/cache';
        
    $config['dir_upload']= dirname(__FILE__).'/../img/news/'.$id;
            return 
    $config;
    }  

    var_dump($userconfig);
    $userconfig=news_content(4711,$userconfig);
    echo 
    '<hr />';
    var_dump($userconfig);
    ?>
    Noch bequemer wäre die Nutzung über Reference, das aber wäre nicht E_STRICT.

    Wer aus einer solchen Pippifaxfunktion eine Klasse stricken will - nun gut .

    Leave a comment:


  • h3ll
    replied
    Ersetze
    PHP Code:
    function news_content($id)
    { global 
    $userconfig
    durch
    PHP Code:
    function news_content($id, &$userconfig)

    _Dann_ kann man damit leben.

    global ist hier einfach unnötig und kann eine zusätzliche Fehlerquelle darstellen.

    Leave a comment:


  • piratos
    Guest replied
    PHP Code:
    <?php
     $id
    =0;
        
    $userconfig = array(
        
    'overwrite_cache' => 'off',                 //Cache bei jedem Aufruf neu erstellen: on = an, off = aus 
        
    'pic_image_quality' => 90,                  //Bildqualitaet: 0 = schlechteste , 100 = beste
        
    'show_metadata_iptc' => 'on',               //IPTC-Ausgabe: on = an, off = aus
        
    'show_metadata_exif' => 'off',              //EXIF-Ausgabe: on = an, off = aus 
        
    'dir_cache' => dirname(__FILE__).'/../img/news/'.$id.'/cache',          //Pfad zum Cache Verzeichnis
        
    'dir_upload' => dirname(__FILE__).'/../img/news/'.$id,        //Pfad zum Upload Verzeichnis
        
    'http_method' => 'GET',                     //Uebermittlungsmethode der Query-Variable: PATHINFO oder GET
        
    'http_var_name' => 'q',                     //Name der Query-Variablen die per http_method uebergeben wird
        
    'response_type' => 'json'                   //Art der Antwort: direkt = json, include = php
    );  
    function 
    news_content($id)
    { global 
    $userconfig;

            
    $userconfig = array(
        
    'overwrite_cache' => 'off',                 //Cache bei jedem Aufruf neu erstellen: on = an, off = aus 
        
    'pic_image_quality' => 90,                  //Bildqualitaet: 0 = schlechteste , 100 = beste
        
    'show_metadata_iptc' => 'on',               //IPTC-Ausgabe: on = an, off = aus
        
    'show_metadata_exif' => 'off',              //EXIF-Ausgabe: on = an, off = aus 
        
    'dir_cache' => dirname(__FILE__).'/../img/news/'.$id.'/cache',          //Pfad zum Cache Verzeichnis
        
    'dir_upload' => dirname(__FILE__).'/../img/news/'.$id,        //Pfad zum Upload Verzeichnis
        
    'http_method' => 'GET',                     //Uebermittlungsmethode der Query-Variable: PATHINFO oder GET
        
    'http_var_name' => 'q',                     //Name der Query-Variablen die per http_method uebergeben wird
        
    'response_type' => 'json'                   //Art der Antwort: direkt = json, include = php
    );
    }  

    var_dump($userconfig);
    news_content(4711);
    echo 
    '<hr />';
    var_dump($userconfig);
    ?>
    Ausgaben:
    HTML Code:
    array(9) {   ["overwrite_cache"]=>   string(3) "off"   ["pic_image_quality"]=>   int(90)   ["show_metadata_iptc"]=>   string(2) "on"   
    
    ["show_metadata_exif"]=>   string(3) "off"   ["dir_cache"]=>   string(47) "/srv/www/htdocs/leipzigtest/../img/news/0/cache"   ["dir_upload"]=>   string(41) 
    
    "/srv/www/htdocs/leipzigtest/../img/news/0"   ["http_method"]=>   string(3) "GET"   ["http_var_name"]=>   string(1) "q"   ["response_type"]=>   string(4) "json" 
    
    }
     array(9) {   ["overwrite_cache"]=>   string(3) "off"   ["pic_image_quality"]=>   int(90)   ["show_metadata_iptc"]=>   string(2) "on"   ["show_metadata_exif"]=> 
    
      string(3) "off"   ["dir_cache"]=>   string(50) "/srv/www/htdocs/leipzigtest/../img/news/4711/cache"   ["dir_upload"]=>   string(44) "/srv/www/htdocs
    /leipzigtest/../img/news/4711"   ["http_method"]=>   string(3) "GET"   ["http_var_name"]=>   string(1) "q"   ["response_type"]=>   string(4) "json" }
    Mit
    dem Ansatz kann man leben.

    Leave a comment:


  • combie
    replied
    Originally posted by piratos View Post
    Nö ich sehe das nur nicht so verbissen wie andere.
    Das hat nichts mit verbissen zu tun.
    Ehr mit Erfahrung und Disziplin.

    Leave a comment:


  • onemorenerd
    replied
    @piratos: global vorzuschlagen war wirklich nicht angebracht. Egal ob du mit global programmierst oder nicht, in dem hier vorliegenden Fall wissen wir doch gar nicht ob die Funktion am Ende nicht $userconfig zurückgibt.

    Leave a comment:


  • piratos
    Guest replied
    Du scheinst zu verbohrt zu sein
    Nö ich sehe das nur nicht so verbissen wie andere.

    Leave a comment:


  • combie
    replied
    Und solche Dinge ........ wirken nicht gerade qualifiziernd.
    Deine Aussagen sollen "besser" sein?
    Unsinn!
    Du scheinst zu verbohrt zu sein, sonst würde ich dir evtl eine Begründung liefern.
    Last edited by combie; 17-07-2009, 13:02.

    Leave a comment:


  • piratos
    Guest replied
    Völlig unnötig, wenn man sauber und objektorientiert programmiert
    Man kann aus jeder Furzfunktion ein OOP Klasse machen, aber klug ist das nicht.

    Nur weils andere scheiße machen, muss man es ja selber nicht genauso machen, oder? Oder ist für dich der Source-Code von phpMyAdmin die Referenz? Dann hast du wohl noch nie in deinem Leben guten Source-Code gesehen.
    Ich schreibe laufend guten Code, aber das kannst du dir wohl nicht vorstellen.
    Schlechte Progger sind immer die, welche mit einer vorgefassten Meinung ran gehen, denn damit hast du Recht.
    Es gibt viele Wege nach Rom.
    Und solche Dinge
    Du hast ihm den schlechtesten gezeigt. Bravo.
    wirken nicht gerade qualifiziernd.

    Leave a comment:


  • PHP-Desaster
    replied
    Völliger Unsinn wenn man weiss was man macht.
    Völliger Unsinn, wenn man weiß wie es besser geht!

    Schau dir mal z.B. Phpmyadmin an wie die auf globals setzen.
    Bevor du dir an dem Code von PMA ein Beispiel nimmst, schau dir doch mal die Codestruktur besser designter Systeme wie zum Beispiel das Zend FW oder Doctrine an.

    Es gibt viele Wege nach Rom. Du hast ihm den schlechtesten gezeigt. Bravo.
    Falls dass denn überhaupt eine Lösung war. Aber ohne einen weiteren klärenden Beitrag vom TO wird das nicht wirklich beantwortbar sein.

    Leave a comment:


  • h3ll
    replied
    Originally posted by piratos View Post
    Da scheinst du ja eine festgefahrene Meinung zu haben.

    Völliger Unsinn wenn man weiss was man macht.
    Völlig unnötig, wenn man sauber und objektorientiert programmiert. Es gibt ganz wenige Sonderfälle, wo ein global sinnvoll ist.

    Originally posted by piratos View Post
    Schau dir mal z.B. Phpmyadmin an wie die auf globals setzen.
    Nur weils andere scheiße machen, muss man es ja selber nicht genauso machen, oder? Oder ist für dich der Source-Code von phpMyAdmin die Referenz? Dann hast du wohl noch nie in deinem Leben guten Source-Code gesehen.

    Originally posted by piratos View Post
    Ansonsten ist die Frage des Fragestelllers beantwortet.
    Es gibt viele Wege nach Rom. Du hast ihm den schlechtesten gezeigt. Bravo.

    Leave a comment:


  • piratos
    Guest replied
    Da scheinst du ja eine festgefahrene Meinung zu haben.

    Völliger Unsinn wenn man weiss was man macht.

    Schau dir mal z.B. Phpmyadmin an wie die auf globals setzen.

    Ansonsten ist die Frage des Fragestelllers beantwortet.
    Last edited by ; 17-07-2009, 12:33. Reason: Ergänzung

    Leave a comment:

Working...
X