-1

私はこれについて助けを求めてたくさん見回しました。これはおそらく私がオブジェクトを使用している方法に関係していることに気づきました(私はオブジェクト指向PHPは初めてです)が、それは本当に私を悩ませています。これは私がやろうとしていることの非常に単純化されたバージョンです:

<?php
class Show_message {
    public $message_instance = ""; //ensure Message object variable is visible
    function __construct() {
    //do nothing
    }
    function display_message() {
        $message_instance = new Message(); //instatiate Message object
        echo $message_instance->message . " : in display_message function <br>"; //works
    }
    function display_again() {
        echo $message_instance->message . " : in display_again function <br>"; //does not work
    }
}
class Message {
    public $message = ""; //ensure $this->message variable is visible?
    function __construct() {
        $this->message = "Hello world"; //make message
    }
}
$instance = new Show_message(); //instatiate Show_message object
$instance->display_message(); //method to create instance and display message
$instance->display_again(); //method to display message again
?>

が関数$message_instance->messageに表示されないのはなぜですか?display_again()

4

2 に答える 2

3

を使用する必要があります。そうしないと、オブジェクトをクラス インスタンスではなく関数にローカルに$this->保存します。Message

$this->message_instance = new Message();

$this->message_instanceどこにいても$message_instance

于 2013-05-26T15:12:53.507 に答える
0

ワーキングデモ

local関数内で変数を設定しているため、$thisオブジェクト プロパティにアクセスするには を使用する必要があります。

<?php
class Show_message {
    public $message_instance = ""; //ensure Message object variable is visible
    function __construct() {
        $this->message_instance = new Message();
    }
    function display_message() {
         //instatiate Message object
        echo $this->message_instance->message . " : in display_message function <br>";
    }
    function display_again() {
        echo $this->message_instance->message . " : in display_again function <br>";
    }
}
class Message {
    public $message = ""; //ensure $this->message variable is visible?
    function __construct() {
        $this->message = "Hello world"; //make message
    }
}
$instance = new Show_message(); //instatiate Show_message object
$instance->display_message(); //method to create instance and display message
$instance->display_again(); //method to display message again
?>
于 2013-05-26T15:19:51.810 に答える