douziqian2871
2013-05-26 15:11
浏览 45
已采纳

PHP对象...为什么在类中实例化类是其他函数不可见的属性?

I've looked around a lot for help on this. I realise this is probably more to do with the way I am using objects (I'm new to OO PHP) but it's really bugging me. Here is a massively simplified version of what I'm trying to do:

<?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
?>

Why is the $message_instance->message not visible to the display_again() function?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongqun9403 2013-05-26 15:12
    已采纳

    You need to use $this->, otherwise you are storing the Message object locally to the function, not to the class instance.

    $this->message_instance = new Message();
    

    and $this->message_instance everywhere you are doing $message_instance.

    点赞 打赏 评论
  • dsf1222 2013-05-26 15:19

    Working Demo

    Because you are setting a local variable inside the function, you must use $this to access object properties.

    <?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
    ?>
    
    点赞 打赏 评论

相关推荐 更多相似问题