[PHP5] Klonen verhindern?

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

  • [PHP5] Klonen verhindern?

    Hallo!

    Kann mir jemand sagen wie ich das Klonen in php5 verhindern kann?

    Das ist eine Aufgabe, aber ich versteh nicht mal wie das gehen soll? Soll eine Fehlermeldung kommen wenn man versucht zu klonen, oder soll es einfach eine Referenz auf das erste Objekt sein?


    Ich hoffe ihr könnt mir helfen.

    Danke und gruß

    mr47

  • #2
    Kann mir jemand sagen wie ich das Klonen in php5 verhindern kann?
    indem du nicht klonst, denn das muss explizit geschehen.
    Das ist eine Aufgabe, aber ich versteh nicht mal wie das gehen soll?
    frag deinen lehrer.

    Kommentar


    • #3
      Du könntest für dein Objekt die Methode __clone() definieren, welche automatisch im Falle des Klonens aufgerufen wird.
      Dort ein die('Klonen ist Scheisse'); rein und sobald man das Objekt klonen will geht nix mehr (intern wird es afaik jedoch doch geklont, doch nach Abschluss des Vorgangs wird __clone() aufgerufen und lässt jede weitere Codeausführung sterben)

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Das sollte reichen, denke ich:
        PHP-Code:
        # Klonen des Objekts durch die Deklaration der Methode __clone() als private final unterbinden
        private final function __clone() {} 
        Das zu tun ist beispielsweise bei Klassen, die das Singleton Entwurfsmuster implementieren, sinnvoll.
        Zuletzt geändert von Griecherus; 30.05.2007, 15:30.
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Bist du sicher ? Ich habe das Manual so verstanden, dass mit __clone() nur der Abschluss des Klonens gemacht wird. Den Anfang übernimmt die Engine direkt
          http://www.zend.com/php5/articles/en...p5-changes.php
          For convenience, the engine will supply a function that imports all of the properties from the source object, so that they can start with a by-value replica of the source object, and only override properties that need to be changed.
          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Original geschrieben von jahlives
            Bist du sicher ? Ich habe das Manual so verstanden, dass mit __clone() nur der Abschluss des Klonens gemacht wird. Den Anfang übernimmt die Engine direkt


            Gruss

            tobi
            Hm, gute Frage.
            Du meinst also, dass das Klonen PHP intern geschieht und __clone nur noch die nötigen Eigenschaften anpasst? Für den Fall, dass du das meinst: Dann bleibt einem doch ohnehin keine Möglichkeit, das Klonen selbst zu unterbinden, sondern nur, dass die Eigenschaften angepasst werden.
            Ich kann mir das nur noch nicht so richtig vorstellen, weil PHP ja irgendeinen Anlass dafür haben muss, ein Objebt zu klonen. Und das sollte doch der explizite Aufruf von __clone sein, oder?

            Ich möchte mich da aber nicht zu weit aus dem Fenster lehnen, vielleicht kann da jemand mit fundierteren Kenntnissen helfen.
            Nieder mit der Camel Case-Konvention

            Kommentar


            • #7
              solange das problem nicht vernünftig beschrieben ist, kann man nur im dunkeln herumstochern.

              Kommentar


              • #8
                Original geschrieben von penizillin
                solange das problem nicht vernünftig beschrieben ist, kann man nur im dunkeln herumstochern.
                Tobi und ich haben die Thread-Problematik auf die generelle Funktionsweise des Klonens erweitert, befürchte ich.
                Nieder mit der Camel Case-Konvention

                Kommentar


                • #9
                  darin muss ich bis jetzt tobi recht geben, weil
                  Original geschrieben von Griecherus
                  ... weil PHP ja irgendeinen Anlass dafür haben muss, ein Objebt zu klonen. Und das sollte doch der explizite Aufruf von __clone sein, oder?
                  nicht stimmt, der aufruf geschieht immer implizit und hat keinen direkten einfluss auf das klonen selbst.

                  Kommentar


                  • #10
                    Original geschrieben von penizillin
                    darin muss ich bis jetzt tobi recht geben, weil nicht stimmt, der aufruf geschieht immer implizit und hat keinen direkten einfluss auf das klonen selbst.
                    Würdest du mir das etwas genauer erklären, bitte? Ich verstehe noch nicht, woher PHP wissen sollte, dass Objekt X zum Zeitpunkt Y geklont werden soll, wenn das Skript es "ihm" nicht explizit befiehlt.
                    Nieder mit der Camel Case-Konvention

                    Kommentar


                    • #11
                      gegenfrage: wie würdest du denn mein objekt $obj klonen?

                      Kommentar


                      • #12
                        Mittels __clone().
                        PHP-Code:
                        $obj_cloned = clone $obj_original
                        Nieder mit der Camel Case-Konvention

                        Kommentar


                        • #13
                          Mittels __clone().
                          das tust du aber nicht.

                          Kommentar


                          • #14
                            Original geschrieben von penizillin
                            das tust du aber nicht.
                            Stimmt... Danke für den Denkanstoß, penizillin.
                            Nieder mit der Camel Case-Konvention

                            Kommentar


                            • #15
                              Okay, danke euch!
                              Ich denk das mit die() oder die ganz lehre Methode werden das Problem lösen


                              gruß mr47

                              Kommentar

                              Lädt...
                              X