私は主な親クラスを編集せずに拡張可能にしたいと考えているPHPで検証クラスを書いています。私は以下の単純化されたバージョンを、私が達成したいと思っているものを提供しました。私はfunction/methodの名前をvalidate()に渡しています。これは最初に存在するかどうかをチェックし、渡された変数をチェックするためにそれを呼び出す場合に有効です。親クラスの子クラスの名前をハードコーディングせずに、子クラスのカスタム検証ルールを取得できないため、OOPの新機能でスコープ/可視性に問題があります。これについて最善の方法は何ですか?あなたが提供できるあらゆる支援に感謝します。バリデーションクラスを拡張可能にするにはどうしたらいいですか?
$rule = "number";
$var = "abcdef";
class Validation
{
public static function validate($rule, $var) {
if (is_callable("self::{$rule}")) {
return self::$rule($var);
}
}
protected static function number($var) {
return (preg_match("/^[0-9]+$/i", $var));
}
}
class MyRules extends Validation
{
public static function letter($var) {
return (preg_match("/^[a-zA-Z]+$/i", $var));
}
}
print MyRules::validate($rule, $var) ? "Valid!" : "Not valid!"; // Not valid!
私はあなたがこれを行うことができたことを知らなかった!非常に便利。私はあなたが静的に1つのコロンを逃したと思う::キーワード – Dan
ああ、ありがとう、ありがとう、これは5.3のように新しいです。 – Ross
Brilliant!それは完璧に働いた。ロスに感謝します。 – Askives