このように簡単なことを書くことができます。クラスを$ _POSTからロード可能にする場合は、拡張可能な基本クラスを作成します。
その後、あなたはまた、形質としてこの余分な機能を書くことができる$ _POSTや$ _GET配列
class Base {
public function load_post($post)
{
foreach ($post as $field=>$val){
if (property_exists($this, $field)){
$this->{$field} = $val;
}
}
}
}
class Person extends Base
{
public $one;
public $two;
public $three;
public function __construct($vars)
{
if (isset($vars)){
parent::load_post($vars);
}
}
}
// pseodo $_POST array
$form_vars = ['one'=>1, 'two'=>2, 'three'=>3];
$p = new Person($form_vars);
print_r($p);
結果
Person Object
(
[one] => 1
[two] => 2
[three] => 3
)
からクラスに存在するものだけをロードするための簡単なforeachの
trait load_post {
public function load_post($post)
{
foreach ($post as $field=>$val){
if (property_exists($this, $field)){
$this->{$field} = $val;
}
}
}
}
class Person
{
use load_post;
public $one;
public $two;
public $three;
public function __construct($vars)
{
if (isset($vars)){
$this->load_post($vars);
}
}
}
// pseodo $_POST array
$form_vars = ['one'=>1, 'two'=>2, 'three'=>3];
$p = new Person($form_vars);
print_r($p);
@MASIDDIQUI私はプログラマーですから、私は一番簡単な方法を望んでいます:PIは多くのクラスを持っていますPDOはそれを持っているので(これはどこかに存在するので)、これにはすでに汎用的な方法がありました。だから、車輪を再構築するのではなく、すでに誰かがそれをしているかどうかを知りたかったのです。 –
"すべてのクラス"ではなく、イントロスペクションを使用する関数を作成し、指定されたクラスのすべてのプロパティ名をポストデータの各フィールドに一致させようとします。すべてが一致する場合は、代入を行い、インスタンスを返します。 – Petruza
これは非常に主観的ですが、 'MVC'と' REST' APIを調べることを提案します。あなたの 'controller(s)'は '$ _POST'リクエストを処理します。適切な'モデル '(オブジェクト)と' view'(レスポンス)の作成をプログラムしますが、RESTではルートを特定のコントローラメソッドを呼び出す。具体的なユースケースの参考になるのは、 'composer.phar'がPHPフレームワーク(Symfony、CodeIgniter)のようにより高度な'オートローダー(autoloader) 'やそれ以上のものを作成する方法を見てみることです。 – fyrye