私が正しく理解していれば、__set()を使うと、その場でクラス変数を作成することができます。これはpublicであり、private/protectedプロパティにアクセスできます。魔法の__set()のプロパティによるバリデーションの使い方は? (PHP)
これは、使用してのように思える:
__set($name,$value) {
$this->data[$name] = $value;
}
OR:
__set($name,$value) {
$this->$name = $value;
}
を... inとoutゴミのすべての種類の結果の両方でしょう。
個々のセッター(突然変異子)では、保護された/個人用のプロパティごとに1つずつ、個別の検証コントロールがありますが、セッターの束を書く必要があります。
魔法の__set()を利用する方法はありますか?それでも、プロパティによっては検証してください。
など。あなたの意見や感想を教えてください:
class stuff {
private $name; // alphabet, limit 10 chars
private $size; // integers 1 - 10;
private $price; // decimals 0.000 - 999.999
__set($property,$value) {
$this->$property = $value;
}
}
$thing = new stuff();
$thing->name = 1234;
$thing->size = 'b';
$thing->price = -40;
どのように悪い割り当てを検証しますか?
私はバックアップできるものではなく、意見ですが、私は魔法を避けようとしています。また、プロパティのカスタムロジックが必要な場合は、セッターを作成することもできます。これは、ロジックの便利な場所を提供します。 – Corbin
私はあなたがセッターを非公開にして__set()を使ってそれらにアクセスし、戻り値を得ることができると考えていました。あなたは$ thing-> name = 1234を使うことができます。依然として個々のセッター機能を有する。 –
ええ、私がそれをしたら、私はセッターを公開しておきます。 (また、私は__setと__getに大きく偏っています。彼らが提供する '魔法'は、明示的な文書化をしなくても、クラスの構造が外部から非常に難しいことも知っています) – Corbin