Ankündigung

Einklappen
Keine Ankündigung bisher.

Multidimensionales Array & Registry Pattern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Multidimensionales Array & Registry Pattern

    Also folgendes ich wollte in meinen Registry Pattern den Setter (__set) in etwa wie folgt aufbauen:

    PHP-Code:
    class registry
    {
    ...
    protected 
    $reg = array();
    ...
    public function 
    __set($string$value)
    {
         if(!
    $this->__isset($string))
        {
            
    $nodes explode('.'$string);

            foreach(
    $nodes as $value)
            {
                
    $this->reg[][][]....
            }
        }
    }

    Und nun habe ich folgendes Problem ich würde gerne den String wie folgt aufbauen:

    config.sql.server

    Der Value naja sagt der nam eja schon alles^^

    Nun möchste ich aber das der für jedes Array, siehe explode('.', $string), dann jeden eintrag in ein multidimensionales array umwandelt.

    Der String kann unterschiedlich sein mal 2 Wörter mal 4 ...

    Das Array sollte dann wie folgt Aussehen reg['config']['sql']['server'].

    Ja das ist eig alles. Dankö!

    das Knecht
    P.S hoffe das gilt noch unter Einsteiger =P


  • #2
    Daran habe ich mich auch schon mehrere Male versucht. Meine Erfahrung: Lass es! Das Konzept ist unflexibel, inperfomant und Du wirst es nie benutzen.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      ? Registry Pattern oder nur mit dem Multidimensionalen ?

      Kommentar


      • #4
        Letzteres. Überleg nur mal, wie Du Arrays darin ablegen und später ansprechen willst. Und was passiert, wenn Du einen Eintrag a.b.c plötzlich mit a.b.c.d ansprichst. Wird dann automatisch ein Array draus? Und ist das praktisch? Was passiert mit den vorher gesetzten Wert...
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          ja ich kenn es halt nur aus joomla dort wird diese methode im registry pattern benutzt aber so wie ich den code verstanden habe maximal 3 werte

          test.test.test

          Hmm aber hast ja recht nur wäre halt scho gut wenn du "keys" in einzelne "abschitte" unterteilen könntest ^^

          Kommentar


          • #6
            Dann mach es halt auch für 3 Ebenen - wahrscheinlich würde es sogar reichen einfach nur ein "bla.blub" zu unterstützen. Mehr ist eh nicht praktikabel - schmeiß 'ne Exception und fertig
            Create your own quiz show.

            Kommentar


            • #7
              Vorschlag: Setz das Ganze - zum Testen (!) - einfach mal mit eval um. Das geht fix. Dann arbeite da mal ne Weile mit und Dur wirst merken, dass das echt nicht funktioniert.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Ja wenn man etwas weiter denkt dann stimmts.

                Aber so muss man erst mal denken ^^

                Auf jeden danke !

                Kommentar


                • #9
                  PHP-Code:
                  Registry::store ('foo'   'test');
                  Registry::store ('foo.1' 'bar');

                  // was jetzt?

                  array (
                    
                  foo =>  array (
                               
                  => test ,
                               
                  => bar  
                  )

                  // oder

                  array (
                    
                  foo =>  array (
                               
                  => bar  
                  )

                  // oder

                  array (
                    
                  foo =>  tbst // das wäre PHP-Prinzip (String-Caracter-Zugriff) 
                  )


                  Registry::restore ('foo');

                  // Wie durchlaufen? Liefert restore immer eine Kopie des Arrays?
                  // Und wenn ich das ändere - wie kriege ich die komplette Struktur wieder in die Registry?



                  Registry::store ('foo'     , new Object);
                  Registry::store ('foo.lol' 'bar');

                  // was jetzt? Das:

                  array (
                     
                  foo =>  object (
                                
                  lol => bar 
                             
                  )
                  )

                  // oder das:

                  array (
                     
                  foo =>  array (
                                
                  lol => bar 
                             
                  )
                  )

                  // ??

                  // Was passiert, wenn ich das tue?

                  Registry::store ('foo'         'test');
                  Registry::restore ('foo.bar');

                  // Wird jetzt foo intern zum Array gecastet? NULL ausgegeben? 
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    hmm also zu niko:

                    Wenn dein reg pattern in etwa wie folgt aussieht dann passiert da nüscht^^

                    PHP-Code:
                    <?php

                    /************************
                     *** WPR                *
                     ************************
                     * @author Knechtle    *
                     * @copyrigt 2010      *
                     * @version 0.1        *
                     ***********************/

                    /**
                    * Registry class for storing some information
                    *
                    * @abstract
                    */
                    abstract class registry
                    {
                        
                    /**
                        * Storage of the registry
                        *
                        * @var array
                        **/
                        
                    private static $reg = array();
                        
                           <-- 
                    some non important code ;) -->

                        
                    /**
                        * Add a new vaiable to the registry
                        *
                        * @param string $key name of the variable
                        * @param mixed $value value of the variable
                        * @return boolen
                        **/
                        
                    public static function set($key$value NULL)
                        {
                            if(!
                    self::has($key))
                            {
                                
                    self::$reg[$key] = $value;
                                return 
                    true;
                            }
                            return 
                    false;
                        }

                        
                    /**
                        * Return the value of an existing key
                        *
                        * @param string $key name of the variable
                        * @return mixed
                        **/
                        
                    public static function get($key)
                        {
                            if(
                    self::has($key))
                            {
                                return 
                    self::$reg[$key];
                            }
                            return 
                    false;
                        }

                        
                    /**
                        * Checks if an key is allready in the registry
                        *
                        * @param string $key name of the variable
                        * @return boolen
                        **/
                        
                    public static function has($key)
                        {
                            if(isset(
                    self::$reg[$key]))
                            {
                                return 
                    true;
                            }
                            return 
                    false;
                        }

                        
                    /**
                        * Update an key excepts two values and one overload
                        *
                        * @param string $key name of the variable
                        * @param mixed $value value of the variable
                        * @overload boolen to verify whether objects are ignored
                        * @return boolen
                        **/
                        
                    public static function update($key$value$ignore_obj false)
                        {
                            if(
                    is_object(self::$reg[$key]) && $ignore_obj === true)
                            {
                                
                    self::$reg[$key] = $value;
                                return 
                    true;
                            }
                            elseif(
                    is_object(self::$reg[$key]) && $ignore_obj === false)
                            {
                                return 
                    false;
                            }
                            
                    self::$reg[$key] = $value;
                            return 
                    true;
                        }
                        <-- 
                    other not important code -->
                    }
                    ?>

                    Kommentar

                    Lädt...
                    X