Php 更好地管理职能部门之间的“消息”?
在我的框架中,我有一些函数,完成后,它们可以向队列中添加一些消息以进行报告 示例:我有一个函数,它获取一张照片的路径,然后 如果图像不是.jpg,则将其转换为.jpg 如果图像大于500kB,则会减小其大小 我有一个全局$msgQueue=array;每当页面的所有逻辑完成时,在我的模板中,我会向用户回显函数在执行过程中可以添加的所有报告 在这种情况下,将向$msgQueue添加2条消息: 该图像为PNG格式,已转换为JPG格式 图像是2000x1000,现在是1000x500 但是这种行为我认为是不规范的。如果我想与某人共享,在本例中,我的函数之一是checkImage$path,它无法工作,因为函数需要该全局数组来放置它们的报告msgPhp 更好地管理职能部门之间的“消息”?,php,frameworks,Php,Frameworks,在我的框架中,我有一些函数,完成后,它们可以向队列中添加一些消息以进行报告 示例:我有一个函数,它获取一张照片的路径,然后 如果图像不是.jpg,则将其转换为.jpg 如果图像大于500kB,则会减小其大小 我有一个全局$msgQueue=array;每当页面的所有逻辑完成时,在我的模板中,我会向用户回显函数在执行过程中可以添加的所有报告 在这种情况下,将向$msgQueue添加2条消息: 该图像为PNG格式,已转换为JPG格式 图像是2000x1000,现在是1000x500 但是这种行为我认
有没有标准的方法来解决这个问题,这样我就可以与其他人共享我的函数,而不用担心这种依赖性 我的建议是使用一个类,比如:
class Report(){
public $msgQueue;
function addReport($string){
array_push($this->msgQueue, $string); //store new report
}
function showReports(){
//loop over the message queue
...
}
}
好处:
您可以使用同一类生成不同类型的报告,将过程与错误分开,例如,$processs=new Report和$errors=new Report
无需将变量声明为全局变量,该类保留其属性$msgQueue的值。您只需将$processs->addreportresizeing image添加到XXX即可
OOP的好处,具有逻辑结构等
我真的不认为有一个标准的方法。我所做的是: 给出每个库的图像、文件等。。它自己的消息数组 使用具有自己的消息数组以及可通过Message::addSource$class、$propertyName构建/添加到的源数组的消息库。我在创建库的实例(如图像)后立即添加消息源 执行Message::render时,它会将每个源的消息与消息类自己的消息相结合,然后呈现它们。 这样做允许每个库独立于其他库,同时仍然能够同时拥有每个实例和全局消息数组 有没有标准的解决方法 这个 是的,它的名字是:见的答案
但如果OOP不是一个选项,但是您应该认真考虑它,那么重构函数以接受MasaGeQueE参数并通过引用传递它可能起作用。
// passing $messageQueue by reference by prepending &
function checkImage( $path, array &$messageQueue = null )
{
/* do image checking */
$result = /* the result of the image checking */;
// if $messageQueue argument is provided
if( $messageQueue !== null )
{
// add the message to the queue
$messageQueue[] = 'Image checking done';
}
return $result; // false or true perhaps.
}
用法:
$messageQueue = array();
if( checkImage( $somePath, $messageQueue ) )
{
echo 'checking image succeeded';
}
else
{
echo 'checking image failed';
}
var_dump( $messageQueue );
// would output something like:
Array(1) (
'Image checking done'
)
这几乎就是我现在所做的,但是是的,也许构建一个对象作为消息就是解决方案