0

私はObjective-Cから来ました。ここでは、オブジェクト指向プログラミングは単なる夢です。(少なくとも私にとっては)

PHPでこれに問題があります。データベースエントリを保存するためのモデルクラスを作成しようとしています。これは次のようになります。

class Model {

    public function __set($name, $value)
    {
        $methodName = "set" . ucfirst($name);

        if (method_exists($this, $methodName)) {
            $methodName($value);
        } else {
            print("Setter method does not exists");
        }
    }

};

これをサブクラス化して、クラスUserを作成したいと思います。

class User extends Model {
    private $userID;

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

    public function setUserID($theUserID) {
        $this->userID = $theUserID;
    }

};

電話をかける$user->__set("userID", "12345");と、次の例外が発生します。

致命的なエラー:Model.class.phpの未定義の関数setUserID()を呼び出す

もちろん、$userオブジェクトはUserオブジェクトです。スーパークラスからメソッドを呼び出せないのはなぜですか?

4

1 に答える 1

6
if (method_exists($this, $methodName)) {
    $methodName($value);
}

オブジェクト内のメソッドの存在を確認しており(method_exists($this, $methodName))、このオブジェクトメソッドではなく、関数を呼び出す場合は、次のようにする必要があります。 $this->$methodName($value);

于 2012-10-28T10:08:32.827 に答える