Rolf B: Instanz um Methoden errweitern

Beitrag lesen

Hallo pl,

das hier versteht PHP nicht (mailer.inc enthält nur die function sendMail):

class Dings {
   require "mailer.inc";
   
   public function MailIt() {
      $this->sendMail();
   }
}

Aber du kannst mit anonymen Funktionen (ab 5.3 vorhanden) etwas machen:

Datei mailer.inc

<?php
return function() {
   echo "I can send a mail\n";
}

und die Verwendung:

class Foo {
   public function DoMail() {
      $sendMail = include "mailer.inc";
      $sendMail();
   }
// oder so
   public function MooMail() {
      $this->sendMail = include "mailer.inc";
      ($this->sendMail)();
   }
}

In MooMail sind die Klammern wichtig, sonst sucht er eine Methode sendMail, findet das Property und moppert. PHP ist nicht JavaScript.

Dann ist die anonyme Funktion, die mailer.inc zurückgibt, nur im Kontext der DoMail Methode oder der Foo-Klasse vorhanden.

Aber ich würde das nicht tun. Im Sinne von SoC gehört der Mailer mit sehr hoher Wahrscheinlichkeit in eine eigene Klasse. Damit es keine Namenskollisionen gibt, legen wir auch noch einen Namespace drumherum (ebenfalls ab PHP 5.3):

mailer.inc

<?php
namespace rost\mail;

class Mailer {
   public function send() {
      echo "I can send a mail\n";
   }
}

und die Verwendung:

class Foo {
   public function DoMail() {
      require_once "mailer.inc"; 
      $mailer = new \rost\mail\Mailer();
      $mailer->send();
   }
}

Die Mailer-Klasse ist dann auch außerhalb der Foo Klasse verfügbar, Klassendefinitionen sind immer global. Aber das schadet vermutlich nichts.

Rolf

--
sumpsi - posui - clusi
0 53

Instanz um Methoden errweitern

pl
  • php
  1. 0
    Tabellenkalk
    1. 0
      pl
  2. 1
    1unitedpower
    1. 0
      pl
      1. 0
        1unitedpower
        1. 0
          Rolf B
          1. 0
            1unitedpower
            1. 0
              Rolf B
              1. 0
                pl
        2. 0
          pl
          1. 0
            1unitedpower
            1. 0
              Matthias Apsel
            2. 0
              pl
              1. 0
                1unitedpower
                1. 0
                  pl
                  1. 2
                    1unitedpower
              2. 0
                pl
                1. 0
                  1unitedpower
            3. 0
              Der Martin
              1. 1
                Christian Kruse
                1. 0
                  pl
                  1. 0
                    Christian Kruse
                2. 0
                  Rolf B
                  1. 0
                    Christian Kruse
                    1. 0
                      Rolf B
                      1. 0
                        Christian Kruse
                        1. 0
                          1unitedpower
                      2. 0
                        1unitedpower
                        1. 0
                          Christian Kruse
                          1. 0
                            1unitedpower
                            1. 0
                              Christian Kruse
                              • elixir
                  2. 0
                    pl
                    1. 0
                      Christian Kruse
                    2. 0
                      pl
                      1. 0
                        Matthias Apsel
              2. 0
                pl
              3. 0
                1unitedpower
              4. 0
                pl
                1. 1
                  Rolf B
                  1. 0
                    pl
                  2. 0
                    pl
  3. 0
    Rolf B
    1. 0
      pl
      1. 2
        Rolf B
        1. -2
          pl
          1. 0
            Christian Kruse
          2. 0
            pl
            • perl
            • php
  4. 0
    pl
    1. 0
      Rolf B
      1. 0
        pl
        1. 0
          Mitleser
      2. 0
        pl