Ankündigung

Einklappen
Keine Ankündigung bisher.

with do wie in Pascal !?

Einklappen

Neue Werbung 2019

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

  • with do wie in Pascal !?

    Hallöschen zusammen,

    ich suche grade eine möglichkeit wie ich z.b. Folgenden Code einfacher gestalten kann :

    PHP-Code:
         $template->assign_var('car_edit_buttons'$car_edit_buttons);
          
    $template->assign_var('car_title_img'$Daten['MImg_src']);
          
    $template->assign_var('galerie_title'$this->getName($car_id)); 
    unter Pascal ginge das wenn ich mich rechte erinnere so :

    Code:
    with $template do 
    begin
          assign_var('car_edit_buttons', $car_edit_buttons);
          assign_var('car_title_img', $Daten['MImg_src']);
          assign_var('galerie_title', $this->getName($car_id)); 
    end;
    die korrektheit des Pascal codes lassen wir mal weg.

    aber den sinn was ich meine dürfte klar sein.

    Ich möchte nicht immer wieder $template->assign_var eingeben müssen sondern einfach nur assign_var.

    Einfach um weniger schreibarbeit zu haben.

    Gibt es da ne möglichkeit ?

    lg Sascha


  • #2
    PHP-Code:
    $data = [];

    // ...

    $data['car_edit_buttons'] = $car_edit_buttons;
    $data['car_title_img'] = $Daten['MImg_src'];
    $data['galerie_title'] = $this->getName($car_id);

    // ...

    foreach ( $data as $item => $value ) {
       
    $template->assign_var($item$value);

    Das was du suchst ist eine Art Scope-Brücke, sowas kann PHP in der Form nicht.

    Alternativ kannst du dir eine Query-Function bauen:

    PHP-Code:
    function with($source$data)
    {
        static 
    $object;
        static 
    $method;
        
        if ( 
    is_object($source) && ! is_null($data) ) {
            
    $object $source;
            
    $method $data;
            
            return 
    null;
        }
        
        if ( ! 
    is_callable([$object$method]) ) {
            throw new 
    LogicException(
                
    'with() must be initialized with an object and a method'
            
    );
        }
        
        return 
    call_user_func([$object$method], $source$data);
    }

    $storage = new ArrayObject();

    with($storage'offsetSet');

    with('foo''bar');
    with('bar''baz');
    with('baz''hello world!');

    var_dump($storage); 
    Code:
    object(ArrayObject)#1 (1) {
      ["storage":"ArrayObject":private]=>
      array(3) {
        ["foo"]=>
        string(3) "bar"
        ["bar"]=>
        string(3) "baz"
        ["baz"]=>
        string(12) "hello world!"
      }
    }
    Mal abgesehen wie Sinnfrei oder Sinnvoll das ganze ist, es ist eine Möglichkeit.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      A) Prüfen ob assign_var nicht ein assoziatives Array unterstützt
      B) Die Templateklasse zum ArrayAccess erweitern
      C)
      PHP-Code:
      foreach (array (
        
      'car_edit_buttons' => $car_edit_buttons
      'car_title_img'    => $Daten['MImg_src']
      'galerie_title'    => $this->getName($car_id)

      ) as 
      $sKey => $mData) {
        
      $template->assign_var $sKey $mData);


      D) Hüllenklasse
      PHP-Code:
      $storage = new TemplateWrapper ($template);

      $storage->foo 'bar';
      $storage->bar 'baz';
      $storage->baz 'hello world!'
      E) etwas in der Richtung:
      PHP-Code:
      class ObjectWrapper () {

        public function 
      __construct ($obj) {
          
      $this->obj $obj;
        }

        public function 
      __call ($method $args) {
          
      call_user_func_array (array ($this->obj $method) , $args);
          return (
      this); // Nachteil: Kann keine Rückgaben auswerten
        
      }

      }

      function 
      with ($object) {
        return new 
      ObjectWrapper ($object);
      }

      with ($template)
        ->
      assign_var ('foo' 'bar')
        ->
      assign_var ('bar' 'baz')
        ->
      assign_var ('baz' 'hello world!')

      --

      „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


      • #4
        Nochmal bissl aufgebohrt:
        PHP-Code:
        class ObjectWrapper {

          public function 
        __construct ($obj) {
            
        $this->obj $obj;
          }

          public function 
        bindReturn (& $var) {
            
        $this->returnVar = & $var;
            return 
        $this;
          }

          public function 
        getReturn () {
            return 
        $this->returnVar;
          }

          public function 
        __call ($method $args) {
            
        $this->returnVar call_user_func_array (array ($this->obj $method) , $args);
            return 
        $this;
          }
        }

        function 
        with ($object) {
          return new 
        ObjectWrapper ($object);

        PHP-Code:
        class Test {
          public function 
        assign_var ($var $val) {
            
        $this->$var $val;
            return 
        strtoupper ($val);
          }
        }

        $template = new Test;

        with ($template)
          ->
        bindReturn ($ret)
          ->
        assign_var ('foo' 'bar')
          ->
        assign_var ('bar' 'baz' $ret)
          ->
        assign_var ('baz' 'hello world!')
        ;

        var_dump ($template); 
        Code:
        object(Test)#1 (3) {
          ["foo"]=>
          string(3) "bar"
          ["bar"]=>
          string(6) "bazBAR"
          ["baz"]=>
          string(12) "hello world!"
        }
        bindReturn könnte man auch in bind/den Konstruktor auslagern.
        --

        „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
          Zitat von tr0y Beitrag anzeigen
          (..)
          Alternativ kannst du dir eine Query-Function bauen:
          (..)
          Mal abgesehen wie Sinnfrei oder Sinnvoll das ganze ist, es ist eine Möglichkeit.
          mir jedenfalls hat das eine möglichkeit gezeigt, static zu nutzen, welche ich so nicht aus der docu lesen konnte.

          Kommentar


          • #6
            Hallöchen,

            Zitat von moma Beitrag anzeigen
            mir jedenfalls hat das eine möglichkeit gezeigt, static zu nutzen, welche ich so nicht aus der docu lesen konnte.
            Zur Ergänzung: das wurde unter Geltungsbereich von Variablen gepackt.

            Viele Grüße,
            lotti

            Kommentar


            • #7
              //OT:
              hab ich doch leztens erst über mein docu lesen handicap nachgedacht
              gut, auch vor nicht alzulanger zeit hab ich in beispielcode immer "return static" gelsen. wollte das mal recherchieren, hatte aber keine zeit.
              was heisst das dann?

              Kommentar


              • #8
                Hallöchen,

                Zitat von moma Beitrag anzeigen
                ..alzulanger..
                Da hab ich doch tatsächlich Angular gelesen. Ich muss in's Bett

                Viele Grüße,
                lotti

                Kommentar


                • #9
                  //OT:

                  haha, reingelegt

                  Kommentar


                  • #10
                    gut, auch vor nicht alzulanger zeit hab ich in beispielcode immer "return static" gelsen. wollte das mal recherchieren, hatte aber keine zeit.
                    Wo hast Du das gelesen? return static::foo() höchstens…

                    static ist halt leider etwas überfrachtet in seiner Bedeutung.

                    - definiert statische Properties
                    - Scope resolution operator
                    - „lokale globale“

                    Zur Ergänzung: das wurde unter Geltungsbereich von Variablen gepackt.
                    Lustigerweise funktioniert das auch in Objektmethoden.
                    --

                    „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


                    • #11
                      Zitat von nikosch Beitrag anzeigen
                      A) Prüfen ob assign_var nicht ein assoziatives Array unterstützt
                      oder es eine Methode assign_vars gibt, welche ein Array erwartet.

                      Um kein Spielverderber zu sein, auch von mir noch eine Variante:
                      PHP-Code:
                      $assign_var = function($p1,$p2) use ($template) {
                        
                      $template->assign_var($p1$p2);
                      };

                      $assign_var('car_edit_buttons'$car_edit_buttons); 
                      LG jspit
                      PHP-Klassen auf github

                      Kommentar


                      • #12
                        Zitat von nikosch Beitrag anzeigen
                        Wo hast Du das gelesen?
                        hab alles durchgesucht hier, finde es nicht mehr.
                        war wohl in meinem täumen; wenn nicht das gleiche ist, wie return self macht es auch in meinen träumen kein sinn....

                        nächste mal melde ich mich früher.

                        Kommentar


                        • #13
                          oder es eine Methode assign_vars gibt, welche ein Array erwartet.
                          Das war damit gemeint.
                          --

                          „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


                          • #14
                            es gibt noch static als called class scope:

                            PHP-Code:
                            class somewhat {
                                public function 
                            cool()
                                {
                                   return new static;
                                }

                                public static function 
                            coolInStatic()
                                {
                                   return new static;
                                }

                            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                            Kommentar


                            • #15
                              das wars glaub ich
                              jedenfalls kommt mir das ähnlich vor. der unterschied zwischen cool() und coolInStatic() ist dasss man cool auch static aufrufen kann, coolInStatic () aber static aufrufen muss ?

                              Kommentar

                              Lädt...
                              X