web-dev-qa-db-ja.com

PHP)の別のクラス内のクラスを呼び出す

クラスの関数内で次のコードを試してみると、キャッチできないphpエラーが発生するため、これがどのように行われるのか疑問に思っています。

public $tasks;
$this->tasks = new tasks($this);
$this->tasks->test();

クラスの開始にパラメータとして$ thisが必要な理由もわかりません:S

ありがとう

class admin
{
    function validate()
    {
        if(!$_SESSION['level']==7){
            barMsg('YOU\'RE NOT ADMIN', 0);
            return FALSE;
        }else{
            **public $tasks;** // The line causing the problem
            $this->tasks = new tasks(); // Get rid of $this->
            $this->tasks->test(); // Get rid of $this->
            $this->showPanel();
        }
    }
}
class tasks
{
    function test()
    {
        echo 'test';
    }
}
$admin = new admin();
$admin->validate();
9
Supernovah

クラスのメソッド(関数)内でpublic $ tasksを宣言することはできません。そのメソッドの外部でtasksオブジェクトを使用する必要がない場合は、次のようにすることができます。

$tasks = new Tasks($this);
$tasks->test();

クラス全体で使用できるようにしたい変数を使用する場合にのみ、「$ this->」を使用する必要があります。

あなたの2つのオプション:

class Foo
{
    public $tasks;

    function doStuff()
    {
        $this->tasks = new Tasks();
        $this->tasks->test();
    }

    function doSomethingElse()
    {
        // you'd have to check that the method above ran and instantiated this
        // and that $this->tasks is a tasks object
        $this->tasks->blah();
    }

}

または

class Foo
{
    function doStuff()
    {
        $tasks = new tasks();
        $tasks->test();
    }
}

あなたのコードで:

class Admin
{
    function validate()
    {
        // added this so it will execute
        $_SESSION['level'] = 7;

        if (! $_SESSION['level'] == 7) {
            // barMsg('YOU\'RE NOT ADMIN', 0);
            return FALSE;
        } else {
            $tasks = new Tasks();
            $tasks->test();
            $this->showPanel();
        }
    }

    function showPanel()
    {
        // added this for test
    }
}
class Tasks
{
    function test()
    {
        echo 'test';
    }
}
$admin = new Admin();
$admin->validate();
24
Lance Kidwell

問題は次のコード行にあります。

_public $tasks;
$this->tasks = new tasks();
$this->tasks->test();
$this->showPanel();
_

publicキーワードは、クラスのメソッドではなく、クラスの定義で使用されます。 PHPでは、クラスでメンバー変数を宣言する必要はありません。$this->tasks=new tasks()を実行するだけで、追加されます。

5
davidtbernal