1

PHP のセッターとゲッターに関する質問が多いようです。ただし、パブリック変数では機能しないとは言及していないようです。

一連のパブリック変数があり、設定時に同じタイプのデータ チェック (主にstrip_tags()) が必要です。

変数をpublicに保ちながらこれを行うための最もコード効率の良い方法は何ですか?

利用できると思われる唯一のオプションは、すべての変数に対してメソッド「setPropertyName」を作成することですが、これは私には不要に思えます。

助けてくれてありがとう。

4

3 に答える 3

2

それらをプライベートにし、パブリックを使用して、変数が存在する場合はそれらをフェッチし、設定時に検証/サニテーション操作を適用できます。__set()__get()

例えば:

class Foo {
    private $variable;
    private $otherVariable;

    public function __get($key) {
        return $this->$key;
    }

    public function __set($key, $value) {
        $this->$key = strip_tags($value);
    }
}

$foo = new Foo;
$foo->variable = "test"; //Works.
echo $foo->variable; //test
于 2012-11-20T18:00:31.743 に答える
0

ゲッターとセッターを実際に明示的に定義することは、おそらくベスト プラクティスです。つまり、__set()および__get()マジック メソッドを使用して、クラスの外部からアクセスできないプロパティ (保護およびプライベート) へのリクエストに対して共通の処理を提供できます。

そのため、プロパティを保護/非公開にし__get()__set()メソッドを指定するだけで済みます (プロパティを使用してプロパティをチェックする場合、またはプロパティをチェックしようとする場合も同様に必要になる場合があり__isset()ます)。__unset()isset()unset()

繰り返しますが、クラスの外部からすべてのクラス プロパティにアクセスできないようにし、アクセスを提供する必要があるときに明示的にセッター/ゲッターを作成することが、実際のベスト プラクティス (IMO) です。

于 2012-11-20T18:06:37.300 に答える
0

試してみることができることの 1 つは、魔法のメソッドです__call($name,$args)。その場合、setPropertyName および getPropertyName 関数をコーディングする必要はありません。

function __call($name,$args){
    $variable=lcfirst(substr($name,3));
    if(!isset($this->$variable))
        return false;
    if(substr($name,0,3)=='set')
        $this->$variable=$args[0];
    else
        return $this->$variable;
    return true;
}

そうは言っても、魔法のメソッドは、適切に使用すればパブリック変数でうまく機能します__get__set以下は私がそれらをどのように利用するかです:

public $variables=array();
function __get($name){
    return isset($this->variables[$name])?$this->variables[$name]:false;
}
function __set($name,$value){
    $this->variables[$name]=$value;
}

次に、両方を一緒に置くの$this->name;ではなく、を使用してアクセスできます。その後、必要に応じて実行できます。$this->getName();

繰り返しますが、これはバックボーンです。タグを削除したい場合は、setter 関数または getter 関数のコードにそれを配置するか、call 関数を変更して、タグを削除する 2 番目の引数をチェックすることができます。$this->setName($value,true);//strip tags

于 2012-11-20T18:04:10.273 に答える