どのように私は私のクラスで定義されたフィールドのためのPHPの__get()と__set()を使うのですか?

StackOverflow https://stackoverflow.com/questions/1180935

質問

私がオーバーロードするの PHP仕様の優れた読み取りを持っていましたに、そして例のほとんどは、単純に(はstdClassに類似)のカスタムフィールドの定義できるようにすることを意図されているように見える。

しかし、どのような私のクラスで定義されたプライベートフィールドについて?どのようにこれらが割り当て/取得する必要が?私は特定の値に設定可能な値とする行為にスイッチを行うことができます:

class A
{
    private $name;
    private $age;

    public function __get( $var )
    {
        switch ( $var )
        {
            case 'name':
                return $this->name;
                break;
            case 'age':
                return $this->age+10; // just to do something different ;)
                break;
            default:
                break;
        }
    }
}

これが最善の方法であり、あるいは他の一般的に受け入れられているベストプラクティスはありますか? (それはクラス内でループクラス変数に可能ですが、あなたはすべてを返すようにしたくないので、それはほとんどの状況では適切ではありませんかどうかに関係なく、私は知りません。)

役に立ちましたか?

解決

これは実質的に、彼らが公共になるだろう、と通常これは単にパブリックプロパティを使用して上であなたに何を獲得していない(ただし、パフォーマンスの低下を支払い、より多くのコード、リスクのバグを記述する必要があります)。

あなたがパブリックプロパティを使用して、あなたが突然(ageとあなたの例のように)それのためにゲッター/セッターを必要とする既存のコードを持っている場合にのみ使用していること。

あなたが(例えば、それは、読み取り専用または遅延し、データベースからフェッチします)プロパティが読み込まれたときに書かれた/いくつかのコードを実行する必要がある場合は、

、あなたは、通常のゲッター/セッター(getAge() / setAge())を使用する必要があります。

他のヒント

私は__get()__set()の広範囲に使用すると私は私の性質がpublicを宣言しました。私はクラスのインスタンスの名前を入力すると、私のIDEが私のためにパブリックプロパティを一覧表示することができるように、私は、両方の長所を望んでいました。どのように私は、プロパティは、クラスの外公共と表示されているにもかかわらず、PHPのインターセプタメソッドが動作するようになりましたか?

を設定しない()のプロパティのI欲求不満のカップルの夜を取っ__get()__set()クラス__construct()にするために使用したい

このは、この方法を考え出す: - 。)

私はそれらを使用して多くの人々を参照してください、しかし、ここで私が何を考えているしないでください。

プライベート変数を取得するために、あなたはおそらく外でアクセスすることができます定義された変数のリストを与えたいです。その後、要求された変数は、その配列であるかどうかを確認します。もしそうであれば、それは得/変更することができます。そうでない場合は、エラーまたはnullを返します。いずれか

正直なところ、このための実装は本当にケースバイケースです。あなたは、単一のアレイ内のすべての情報を格納し、ユーザーのクラスを持っていた場合、あなたはする$ user->名前を持ってする$ user->アカウント[「名前」]、またはそのようなことから引くことができます。

また、より多くのケース・バイ・ケースでは、パスワードをハッシュのように、それらに値を与える前に、いくつかの変更を行うことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top