我的框架我有一些功能,完成后可以将一些消息添加到队列中进行报告。
示例:我有一个采用照片路径和
的功能我有一个全局$msgQueue=array();
,每当页面的所有逻辑都完成后,在我的模板中,我向用户回复所有报告(函数可以在exectuion期间添加)。
在这种情况下,2条消息将被添加到$ msgQueue:
但这种行为我觉得它不标准。如果我想与某人共享我的一个函数(在这种情况下是checkImage($path)
)它无法工作,因为函数需要全局数组来放置它们的报告信息。
是否有一种标准方法可以解决这个问题,以便我可以与其他人分享我的功能,而不用担心这种依赖性?
答案 0 :(得分:0)
我的建议是使用类,如:
class Report(){
public $msgQueue;
function addReport($string){
array_push($this->msgQueue, $string); //store new report
}
function showReports(){
//loop over the message queue
...
}
}
<强>优点:强>
您可以使用同一个类使用不同类型的报告,将流程与错误分开,例如$processes = new Report
和$errors = new Report
无需将vars声明为全局变量,该类保留其属性$msgQueue
的值,您只需要$processes->addReport("Resizing image to XXX")
OOP的好处,具有逻辑结构等。
答案 1 :(得分:0)
我真的不认为有标准方法。我这样做是:
为每个库(图像,文件等)提供自己的消息数组。
使用具有自己的消息数组的消息库以及可以通过Message::addSource($class, $propertyName)
构建/添加的“源”数组。 (我在创建库的实例后立即添加消息源,例如Image。)
这样做可以使每个库独立于其他库,同时仍然可以同时拥有每个实例和全局消息数组。
答案 2 :(得分:0)
是否有标准方法可以解决 此?
是的,它名为OOP :)(请参阅amosrivera的答案)。
但是如果OOP不是一个选项(但你应该认真考虑它),那么重构函数以接受messageQueue参数(并通过引用传递)可能会有效。
// 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'
)