2009-08-17 13 views
1

Ich bin dabei, meine Klasse neu zu formatieren (siehe unten) - ich glaube, ich habe den Fehler gemacht, alles mit der gleichen Sichtbarkeit in meiner Klasse zu setzen, während Eigenschaften wirklich sein sollten Private und Getter/Setter sollten in den meisten Fällen öffentlich sein.Setters/Getters, Sichtbarkeit [OOP] in PHP

Um eine Eigenschaft zu ergattern, mache ich nur $ path-> propertyname, aber ich habe bemerkt, dass es praktischer ist, Setter/Getter zu haben. Wenn ich Getter implementieren würde, sollte ich für jede Eigenschaft einen erstellen oder kann ich einen für die gesamte Klasse erstellen? So zum Beispiel sagen, ich möchte den Controller-Namen zu bekommen ...

public function getController() { 
    return $this->controller; 
} 

Und das würde die Controller-Privateigentum zurückgeben? Ist es üblich, eine allgemeinere Getter/Setter oder sogar eine Hybrid-Methode, die und Sets für mich bekommt?

Hier ist die Klassenstruktur (nur Eigenschaften/Methoden):

class urlParser { 

    public static $url  = ''; 
    public static $controller = ''; 
    public static $baseController = ''; 
    public static $urls  = ''; 
    public static $template  = ''; 
    public static $captures  = ''; 
    public static $contentXML = ''; 

    function __construct($urls) { 

     $this->urls = $urls; 

     $this->baseController = $urls['default']; 

     $this->get_url(); 
    } 

    public function get_url() { 
     // sets following properties: 
     // url, template, controller, contentXML, baseController 
    } 
} 
+1

Können Sie Ihre Frage aktualisieren, um die Fragen deutlicher zu machen? Niemand wird den ganzen Code durchsehen, bevor er weiß, wonach Sie fragen. – Blixt

+0

Ok - meine Frage auf etwas einfacher aktualisiert. –

Antwort

1

Für den Fall, dass Sie etwas außer dem Zurückgeben des Controllers tun müssen, brauchen Sie keinen Getter, da Sie keinen Setter benötigen, wenn Sie nichts tun mit Eigenschaft, nachdem es festgelegt wurde.

Wenn Sie wirklich Getter und Setter wollen, können Sie __get und __set magische Methoden für alle Ihre Eigenschaften verwenden. Aber das ist völlig sinnlos, wenn der Fall so ist, wie ich es oben beschrieben habe.

0

einen Blick auf, in php Überlastung: http://php.net/overload

gibt es zwei magische Methoden __get() und __set() die genau tun könnte, was Sie wollen

0

PHP-Objekte haben einige nette magic methods (obwohl ich nicht alle von ihnen verwenden, weil es verwirrend werden kann). Die, die Sie suchen können, ist __get() und __set(). Sie müssten Ihren gesamten Code immer noch umgestalten, wenn Sie Ihre Datenfelder als privat kennzeichnen (was Sie vermeiden sollten, damit Ihr anderer Code nicht falsch auf Felder zugreift. Auf diese Weise können Sie Ihren Code ein wenig besser und einfacher machen zu halten.

Obwohl ich in der Regel versuchen, Getter und Setter für jedes privates Datenfeld zu haben, weil Sie leicht jede Validierung für jedes Feld sehen. plus ich bin eher ein Java-Entwickler als ein PHP-Entwickler.