我正在为下面的问题寻找更好的解决方案。
我想从调用多个类来执行各种任务的主脚本开始记录。 我希望所有被调用的类共享日志记录实例并将消息添加到日志中。
例如:
主要脚本:
<?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/