我正在寻找更好的解决方案。
我想从主脚本开始记录,该脚本调用多个类来执行各种任务。 我希望所有被调用的类共享日志记录实例并将消息添加到日志中。
例如:
主脚本:
<?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);
CLASSA:
<?php
class classA {
function __construct($log="") {
if(is_object($log)) {
$log->AddMessage("log added from within classA");
}
}
}
更好的方法是什么?
答案 0 :(得分:1)
您可以考虑创建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),并且您将能够在所有对象中建立数据库连接。您已通过Registry对象的类。
当然你可以为某些类对象传递选定的注册表对象而不是整个注册表
答案 1 :(得分:0)
一些不错的回答人,谢谢你。根据我的要求,我坚持使用我原来的东西,因为没有其他建议能更好地匹配我已有的东西。
答案 2 :(得分:-1)
创建一个php Global $ log可能