php - 在 PHP 中跨类共享类实例

标签 php class oop object

我正在为下面的问题寻找更好的解决方案。

我想从调用多个类来执行各种任务的主脚本开始记录。 我希望所有被调用的类共享日志记录实例并将消息添加到日志中。

例如:

主要脚本:

<?php

include 'log.php'
include 'classA.php'
include 'classB.php'

// start new logs
$log = new log('my_log_file.log');
$log->addMessage('log added outside any classes');

// continue loggin within other classes

$task_a = new classA($log);

$task_b = new classB($log);

A 类:

<?php

class classA {

function __construct($log="") {

  if(is_object($log)) {
    $log->AddMessage("log added from within classA");
  }

}

}

执行此操作的更好方法是什么?

最佳答案

您可以考虑创建 Registry 类并将日志对象放入其中

<?php

include 'registry.php';
include 'log.php';
include 'classA.php';
include 'classB.php';

// start new logs
$registry = new registry();
$registry->addLogger(new log('my_log_file.log'));
$registry->getLogger->addMessage('log added outside any classes');

// continue loggin within other classes

$task_a = new classA($registry);

$task_b = new classB($registry);

a.php 类

<?php

class classA {

function __construct($registry="") {

  if(is_object($registry)) {
    $registry->getLogger()->AddMessage("log added from within classA");
  }

}

}

有什么收获?如果您决定需要将其他对象传递给其他类,例如数据库连接、应用程序配置或其他对象,您只需修改注册表,向注册表添加新对象(例如 addDatabase),您就可以拥有所有的数据库连接您已传递给注册表对象的类。

当然,对于某些类对象,您可以只传递选定的注册表对象而不是整个注册表

关于php - 在 PHP 中跨类共享类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23613117/

相关文章:

php - 插件在 CodeIgniter 中不起作用

java - 当从另一个类调用方法时 - 返回一个难以理解的值 JAVA

c++ - 如何选择一个类来动态实例化?

java - 设计运行时在两个实现类之间进行选择

php - 如何创建 JSON 对象

php - PDO 全局使用

c# - 如何在 "normal"c# 类中使用/注入(inject)服务,例如 Blazor @inject ClassName classObject

php - 我如何从 OOP 编程中的类返回多个数据库记录

java - java中静态最终变量初始化

javascript - 指定 ZeroClipboard.swf 的路径,Laravel + jQuery