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