venty: erstelle das erste mal eine klasse :S

Einfach und kurz: Wiso funktioniert das Skript nicht?

<?php  
class siteBuilder {  
    // getHTML - Ladet das Tamplate aus dem Ordner 'template'  
    public function getHTML($template) {  
        public $html = file_get_contents('template/'.$template);  
    }  
  
    // returnHTML - Gibt das bearbeitete Template zurück;  
    public function returnHTML() {  
        return $html;  
    }  
}  
?>

Ich bekomme diese Fehlermeldung: Parse error: syntax error, unexpected T_PUBLIC in /home/venty/public_html/shop-0.1/class/siteBuilder.php on line 10

mfg Venty

  1. Hi,

    Einfach und kurz: Wiso funktioniert das Skript nicht?

    <?php

    class siteBuilder {
        // getHTML - Ladet das Tamplate aus dem Ordner 'template'
        public function getHTML($template) {
            public $html = file_get_contents('template/'.$template);
        }

    // returnHTML - Gibt das bearbeitete Template zurück;
        public function returnHTML() {
            return $html;
        }
    }
    ?>

    
    >   
    > Ich bekomme diese Fehlermeldung: Parse error: syntax error, unexpected T\_PUBLIC in /home/venty/public\_html/shop-0.1/class/siteBuilder.php on line 10  
      
    In Zeile 10? Das wundert mich. Eigentlich müsstest du den Fehler in Zeile 5 gemeldet bekommen, denn public hat an der Stelle nichts zu suchen.  
      
    <http://www.php.net/manual/en/language.oop5.properties.php>  
    <http://www.php.net/manual/en/language.oop5.visibility.php>  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
  2. Hi!

    <?php  
    class siteBuilder {  
      
        protected $html; // warum sollte das public sein?  
        // getHTML - Lädt das Template aus dem Ordner 'template'  
        public function getHTML($template) {  
            // hier fehlt eine Prüfung, ob $template ok ist!!  
            public $html = file_get_contents('template/'.$template);  
        }  
      
        // returnHTML - Gibt das bearbeitete Template zurück;  
        public function returnHTML() {  
            return $this->html; // $this ist wichtig!!  
        }  
    }  
      
    
    

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Hi!

      class siteBuilder {
          protected $html; // warum sollte das public sein?

      Warum nicht? Oder auch: warum protected und nicht private? Es gibt keine Verordnung, dass Eigenschaften nicht öffentlich sein dürfen. Ebenso gibt es keine, dass auf Eigenschaften nur über Zugriffsmethoden zugegriffen werden darf. Inwieweit das eine oder andere sinnvoll ist, hängt von der Aufgabenstellung ab, die uns jedoch nicht bekannt ist.

      public function getHTML($template) {
              // hier fehlt eine Prüfung, ob $template ok ist!!

      "ok" in welcher Hinsicht?

      public $html = file_get_contents('template/'.$template);

      Diese Zeile ist weiterhin fehlerhaft. $this->html = ...
      venty: Hast du auch daran gedacht, dass der Dateizugriff aus vielerlei Gründen misslingen kann?

      public function returnHTML() {
              return $this->html; // $this ist wichtig!!

      Ja. Was ist allerdings, wenn returnHTML() aufgerufen wird bevor getHTML() ein Template besorgt hat. Außerdem wäre zu überlegen, wie sinnvoll es ist, den Zugriff so zu trennen. Aber das kann man nur unter Kenntnis der vorgesehenen Anwendungsfälle näher betrachten.

      Lo!

      1. Hi!

        class siteBuilder {
            protected $html; // warum sollte das public sein?

        Warum nicht?

        Weil die Getter-Methode dann sinnfrei ist. Man könnte hier auch ein wenig PHP-Magie anwenden und __get benutzen.

        Oder auch: warum protected und nicht private?

        Das ist eine Design-Frage - wenn die Klasse nicht bestimmbar final ist, wähle ich immer protected, da evtl. geerbt werden wird.

        Es gibt keine Verordnung, dass Eigenschaften nicht öffentlich sein dürfen.

        Wo habe ich denn verordnet?

        Ebenso gibt es keine, dass auf Eigenschaften nur über Zugriffsmethoden zugegriffen werden darf.

        Es ist aber eine Getter-Methode im vorliegenden Fall vorhanden, oder?

        Inwieweit das eine oder andere sinnvoll ist, hängt von der Aufgabenstellung ab, die uns jedoch nicht bekannt ist.

        Ja - ACK! Mein Beitrag war auch nur als Vorschlag und Hilfestellung beim Bau der *ersten* Klasse zu verstehen und nicht als Dogma;-)

        public function getHTML($template) {
                // hier fehlt eine Prüfung, ob $template ok ist!!

        "ok" in welcher Hinsicht?

        Gültig, zulässig - das sollte aber OP nachfragen denn Dir untetrstelle ich, dass Du weißt was ich meine.

        public $html = file_get_contents('template/'.$template);

        Diese Zeile ist weiterhin fehlerhaft. $this->html = ...

        Stimmt - die habe ich 'vergessen' bzw. überlesen.

        venty: Hast du auch daran gedacht, dass der Dateizugriff aus vielerlei Gründen misslingen kann?

        Ich habe daran gedacht, deshalb mein Hinweis.

        public function returnHTML() {
                return $this->html; // $this ist wichtig!!

        Ja. Was ist allerdings, wenn returnHTML() aufgerufen wird bevor getHTML() ein Template besorgt hat.

        Da fehlt noch ein Error-Handling, ja!

        Außerdem wäre zu überlegen, wie sinnvoll es ist, den Zugriff so zu trennen.

        Ich habe OP so vertsanden, dass das Beispiel zu Lernzwecken dienen soll - "erstelle das erste mal eine klasse".

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
        1. Hi!

          class siteBuilder {
              protected $html; // warum sollte das public sein?
          Warum nicht?
          Weil die Getter-Methode dann sinnfrei ist.

          Ja, so gesehen hast du Recht. Ob sich venty allerdings bewusst ist, warum er da einen Getter verwendet, oder das einfach nur irgendwo gesehen und nun vielleicht unnötigerweise implementiert hat, wäre wissenswert, für eine genauere Beurteilung.

          Man könnte hier auch ein wenig PHP-Magie anwenden und __get benutzen.

          Das würde ich mal geflissentlich übergehen, weil venty offensichtlich noch Klassen-Anfänger ist und erstmal die Grundlagen beherrschen sollte, bevor er sich an die Magie ranwagt.

          Oder auch: warum protected und nicht private?
          Das ist eine Design-Frage - wenn die Klasse nicht bestimmbar final ist, wähle ich immer protected, da evtl. geerbt werden wird.

          Eben. Dazu müssen wir wie gesagt, die Umstände kennen.

          Es gibt keine Verordnung, dass Eigenschaften nicht öffentlich sein dürfen.
          Wo habe ich denn verordnet?

          Hast du nicht, aber weil du so selbstverständlich davon ausgingst, dass das nicht public zu sein hat, vermutete ich dich als Getter/Setter-Hardliner. Im Hinblick auf den Getter wirst du vermutlich nur gedacht haben: Wenn schon Getter, dann aber richtig.

          Ebenso gibt es keine, dass auf Eigenschaften nur über Zugriffsmethoden zugegriffen werden darf.
          Es ist aber eine Getter-Methode im vorliegenden Fall vorhanden, oder?

          Ja, ich war nur etwas zu unaufmerksam, um sie als solche zu erkennen.

          Inwieweit das eine oder andere sinnvoll ist, hängt von der Aufgabenstellung ab, die uns jedoch nicht bekannt ist.
          Ja - ACK! Mein Beitrag war auch nur als Vorschlag und Hilfestellung beim Bau der *ersten* Klasse zu verstehen und nicht als Dogma;-)

          Ich will es gar nicht erst soweit kommen lassen, dass er sich da ein Dogma angewöhnt. Besser finde ich es, möglichst neutral alle Möglichkeiten kennenzulernen und sich dann Wissen anzulesen und Erfahrungen zu sammeln, wann was mit welchen Vor- und Nachteilen verwendet werden kann.

          public function getHTML($template) {
                  // hier fehlt eine Prüfung, ob $template ok ist!!
          "ok" in welcher Hinsicht?
          Gültig, zulässig - das sollte aber OP nachfragen denn Dir untetrstelle ich, dass Du weißt was ich meine.

          Das ist die Frage, ob die Funktion auch zuständig sein soll, einen Zugriff auf Dateien außerhalb des Template-Verzeichnisses zu verhindern. Man könnte es vermuten, weil er da den Namen des Template-Verzeichnisses fest eincodiert hat. (Das feste Eincodieren ist aber nicht unbedingt sinnvoll im Hinblick auf eine Wiederverwendbarkeit der Funktion/Klasse.) Ein Test auf in $template enthaltene / und \ wäre vermutlich angebracht, ebenso ob der Inhalt mit einem . anfängt (versteckte Dateien wie .htaccess).

          venty: Hast du auch daran gedacht, dass der Dateizugriff aus vielerlei Gründen misslingen kann?
          Ich habe daran gedacht, deshalb mein Hinweis.

          Das ist ja der zweite Teil. Selbst wenn der Name des Templates einer Prüfung standhält, kann beim Zugriff ein Fehler auftreten. Den kann man schlecht mit einer Prüfung von $template erkennen, da muss man den Rückgabewert von file_get_contents() auswerten (auf false testen).

          Außerdem wäre zu überlegen, wie sinnvoll es ist, den Zugriff so zu trennen.
          Ich habe OP so vertsanden, dass das Beispiel zu Lernzwecken dienen soll - "erstelle das erste mal eine klasse".

          Da kommt es auf das Lernziel an. Ist es Getter kennenzulernen oder wie man die Aufgabenstellung "Hole mir das Template" sinnvollerweise löst?

          Lo!

          1. Hi!

            Ich kürze mal ab:

            Ich will es gar nicht erst soweit kommen lassen, dass er sich da ein Dogma angewöhnt.

            ACK! Wenn OP mitliest, hat er bestimmt schon etwas mitbekommen und kann ggf. nachfragen.

            off:PP

            --
            "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    2. Hi!

      Mein Fehler, sorry!

        
          public function getHTML($template) {  
               // hier fehlt eine Prüfung, ob $template ok ist!!  
               $this->html = file_get_contents('template/'.$template);  
             // und die Hinweise von dedlfix bitte auch beachten...  
           }  
      
      

      off:PP

      --
      "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)