PHP OOP:创建消息的全局数组
我试图在PHP类的末尾显示一个消息数组。我的消息处理程序正在工作,但仅当我从主父类中“添加_消息”时,并且当我从子类中调用此函数时,消息处理程序才工作。对不起,如果这是含糊不清的,但不知道如何用词的问题 TLDR;如何添加来自类内示例的消息?PHP OOP:创建消息的全局数组,php,oop,Php,Oop,我试图在PHP类的末尾显示一个消息数组。我的消息处理程序正在工作,但仅当我从主父类中“添加_消息”时,并且当我从子类中调用此函数时,消息处理程序才工作。对不起,如果这是含糊不清的,但不知道如何用词的问题 TLDR;如何添加来自类内示例的消息? 主父类 class Init { public function __construct() { $this->load_dependencies(); $this->add_messages();
主父类
class Init {
public function __construct() {
$this->load_dependencies();
$this->add_messages();
$this->add_msg_from_instance();
}
private function load_dependencies() {
require_once ROOT . 'classes/class-messages.php';
require_once ROOT . 'classes/class-example.php';
}
public function add_messages() {
$this->messages = new Message_Handler();
$this->messages->add_message( 'hello world' );
}
// I Would like to add a message from within this instance....
public function add_msg_from_instance() {
$example = new Example();
$example->fire_instance();
}
public function run() {
$this->messages->display_messages();
}
}
class Example {
public function fire_instance() {
$this->messages = new Message_Handler();
$this->messages->add_message( 'Hello Universe!' ); // This message is NOT being displayed...
}
}
消息处理程序
class Message_Handler {
public function __construct() {
$this->messages = array();
}
public function add_message( $msg ) {
$this->messages = $this->add( $this->messages, $msg );
}
private function add( $messages, $msg ) {
$messages[] = $msg;
return $messages;
}
// Final Function - Should display array of all messages
public function display_messages() {
var_dump( $this->messages );
}
}
示例类
class Init {
public function __construct() {
$this->load_dependencies();
$this->add_messages();
$this->add_msg_from_instance();
}
private function load_dependencies() {
require_once ROOT . 'classes/class-messages.php';
require_once ROOT . 'classes/class-example.php';
}
public function add_messages() {
$this->messages = new Message_Handler();
$this->messages->add_message( 'hello world' );
}
// I Would like to add a message from within this instance....
public function add_msg_from_instance() {
$example = new Example();
$example->fire_instance();
}
public function run() {
$this->messages->display_messages();
}
}
class Example {
public function fire_instance() {
$this->messages = new Message_Handler();
$this->messages->add_message( 'Hello Universe!' ); // This message is NOT being displayed...
}
}
因为您希望在不同的对象周围保留消息,所以应该传递该对象或使用静态变量 我会使用这样一个静态变量:
class Init {
public function __construct() {
$this->load_dependencies();
$this->add_messages();
$this->add_msg_from_instance();
}
private function load_dependencies() {
require_once ROOT . 'classes/class-messages.php';
require_once ROOT . 'classes/class-example.php';
}
public function add_messages() {
// renamed the message handler variable for clarity
$this->message_handler = new Message_Handler();
$this->message_handler->add_message( 'hello world' );
}
// I Would like to add a message from within this instance....
public function add_msg_from_instance() {
$example = new Example();
$example->fire_instance();
}
public function run() {
$this->message_handler->display_messages();
}
}
class Message_Handler {
// use a static var to remember the messages over all objects
public static $_messages = array();
// add message to static
public function add_message( $msg ) {
self::$_messages[] = $msg;
}
// Final Function - Should display array of all messages
public function display_messages() {
var_dump( self::$_messages );
}
}
class Example {
public function fire_instance() {
// new object, same static array
$message_handler = new Message_Handler();
$message_handler->add_message( 'Hello Universe!' );
}
}
// testing...
new Init();
new Init();
$init = new Init();
$init->add_msg_from_instance();
$init->add_msg_from_instance();
$init->add_msg_from_instance();
$init->run();
尽管全局变量可能不是最佳设计决策,但您至少有两种方法可以实现您的目标:
class MessageHandler
{
private static $instance;
private $messages = [];
public static function instance(): self
{
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct()
{
}
public function addMessage($message): self
{
$this->messages[] = $message;
return $this;
}
public function messages(): array
{
return $this->messages;
}
}
然后通过静态方法MessageHandler::instance()
访问它,而不是创建MessageHandler
的新实例。这是
您从未调用
display\u messages()
。。。顺便说一句:您的代码中没有子类……您从未将$messages
变量保存到任何地方。尝试添加受保护的$messages代码>在你的代码> MessageHandler 你应该考虑阅读,因为你的大多数代码是无效的。非常感谢,这帮助我更多地理解静力学!