0

簡単なサンプルのphpスクリプトを作成しようとしています。ユーザークラスがあり、次に2つのコントローラーがあります。

ビューのないMVCとして想像してみてください。

現時点では、getUserId()で仕事をshowUserId()することができませんがusercontroller、何が間違っているのですか?

PHP

<?
class user{

    function getUserId(){

        return 1; //Simple Example
    }
}

class controller{

    function __construct(){

        $user = new User();
    }
}

class usercontroller extends controller{

    function __construct(){

        $user = new User();
    }

    function showUserId() {

        echo $user->getUserId();
    }
}
?>
4

4 に答える 4

1

$user__constructスコープ内でのみ使用できます。オブジェクトスコープで使用できるようにするには、メンバーとしてオブジェクトにバインドする必要があります。

$this->user = new User;

次に、にアクセスできます$this->user

明確にするためだけでなく、正しいアクセス修飾子を設定するためにも、このメンバーをクラス定義の一部として含めることをお勧めします。

于 2013-01-31T04:03:53.167 に答える
1
class usercontroller extends controller{

    private $user;

    function __construct(){

        $this->user = new User();
    }

    function showUserId() {

        echo $this->user->getUserId();
    }
}

$ userをコントローラークラスのクラス属性として定義し、コンストラクターで定義する必要があります。そうすれば、すべての関数で使用できます。

編集;

はい、oarentで定義し、子コンストラクターで親のコンストラクターを呼び出して使用できます。

<?
class user{   
    function getUserId(){    
        return 1; //Simple Example
    }
}

class controller{
    protected $user;
    function __construct(){    
        $this->user = new User();
    }
}

class usercontroller extends controller{

    function __construct(){
        parent::__construct();
        //$user = new User();
    }

    function showUserId() {    
        echo $this->user->getUserId();
    }
}

$controller_instance = new usercontroller();
$controller_instance->showUserId();    
?>
于 2013-01-31T04:04:12.837 に答える
1

コード例では、$ userは__construct()関数のローカル変数として存在します。

それをクラスの一部にしたい場合は、最初にその名前でクラスプロパティを定義し、次に$this->構文を使用してそれを参照できます。

class usercontroller extends controller {
    public $user;

    function __construct(){
        $this->user = new User();
    }

    function showUserId() {
        echo $this->user->getUserId();
    }
}

ちょっとした注意点として、コード例では「User」クラスは「user」として定義されています。スクリプトの解析エラーについて質問していなかったので、それらを一致させることを意図したと確信しています。

于 2013-01-31T04:04:54.440 に答える
1

変数が実際にそこに属しているとは思わないので、から$user変数を取り出します。controller

class controller
{
}

次に、内部usercontrollerでユーザーオブジェクトを依存関係として渡します。

class usercontroller extends controller
{
    private $user;

    function __construct(User $user)
    {
        $this->user = $user;
    }

    public function showUserId() 
    {
        echo $this->user->getUserId();
    }
}

$c = new usercontroller(new User());
echo $c->showUserId();
于 2013-01-31T04:19:07.043 に答える