-2

私は何百ものクラスモデル(MVCシステムのモデル)を持っています。
リレーショナル クラスでインスタンスを作成するにはどうすればよいですか?

クラスの例には、次のようなメソッドがあります。

class object {
    /**
     * Simply create new instance of this object
     * @return object
     */
    function createNewInstance() {
        $class_name = __CLASS__;
        $return = new $class_name;
        return $return;
    }
}

ご覧の__CLASS__とおり、このクラスの場合にリレーショナル名を取得するために使用します。
インスタンスを作成するより良い方法はありますか?
それを行う反射法があると聞きましたか?

4

1 に答える 1

1

get_class()が必要なようです http://codepad.org/yu6R1PDA

<?php
class MyParent {
    /**
     * Simply create new instance of this object
     * @return object
     */
    function createNewInstance() {
        //__CLASS__ here is MyParent!
        $class_name = get_class($this);
        return new $class_name();
    }
}

class MyChild extends MyParent {
   function Hello() {
    return "Hello";
    }
}

$c=new MyChild();
$d=$c->createNewInstance();
echo $d->Hello();

これも機能します:

class MyParent {
    /**
     * Initialise object, set random number to be sure that new object is new
     */
    function __construct() {
    $this->rand=rand();
    }

}

class MyChild extends MyParent {

   function Hello() {
    return "Hello ".$this->rand;
    }
}

$c=new MyChild();
$d=new $c;
echo $c->Hello()."\n";
echo $d->Hello()."\n";
于 2012-11-04T09:06:04.243 に答える