PHPでセッター/ゲッター、可視[OOP]
-
18-09-2019 - |
質問
私は(下見て)私のクラスを再フォーマットする過程にいるよ - 私は私のクラスで同じ視界ですべての設定のミスを犯したと思いますが、性質が本当にプライベートでなければならず、ゲッター/セッターがほとんどで、公開する必要があり、一方、ケースます。
私はちょうど$ path-> propertyNameのやるプロパティを取得しますが、私はそのより実用的な持っているセッター/ゲッターを気づきました。私はゲッターを実装した場合、私は、各プロパティのための1つを作るべきか、私はクラス全体のための1つを作ることができますか?だから、例えば私は、コントローラ名を取得したいと言う...
public function getController( ) {
return $this->controller;
}
そして、それは、コントローラ私有財産を返すでしょうか?それは一般的な私のためにとのセットを取得し、より汎用的なゲッター/セッターあるいはハイブリッド方式を持ってますか?
ここでは、クラス構造体(単にプロパティ/メソッド)があります:
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
}
}
解決
あなたの場合にはセッターとゲッターを持つことは無意味である。
それが設定された後、あなたがプロパティで何もしない場合は、セッターを必要としないように、あなたは、コントローラを返す以外に何もする必要はありケースでは、ゲッターを必要としません。
あなたが本当にゲッターとセッターをしたい場合は、、あなたは__getを使用し、すべてのあなたの特性のための魔法のメソッドを__setすることができます。私は上記のようなケースがある場合しかし、それは全く無意味です。
他のヒント
PHPでのオーバーロードを見てみましょう: http://php.net/overloadする
2つの魔法のメソッドは正確にあなたが望むものを行う可能性があります__get()
と__set()
PHPオブジェクトはいくつかの素晴らしいマジックメソッドの(ただしを持っていますそれは混乱得ることができますので、私は)それらのすべてを使用しないでください。あなたが探していることができる1つは、です__get()と __set()の。あなたがプライベートなデータフィールドを作成することを選択した場合は、まだこの方法は、あなたのコードは少し良くかつ容易に行うことができますそれをやって。あなたはあなたが誤って他のコードへのアクセスのフィールドを持っていない必要があることをどの(すべてのコードをリファクタリングする必要があります維持するために。
が、私は通常、あなたが簡単に各フィールドの検証を一切見ることができるので、各個人データフィールドのゲッターとセッターを持ってしてみてください。プラス私は、PHPの開発者よりもJava開発者の多くをしています。