在我的HMVC项目中,我实施了Arrays
课程。其 STATIC 方法总体上用于处理多维数组上的各种操作。除了这个课程,我也使用类似的课程:Files
,Images
,Printer
,Messages
,Classes
等。但我不想要任何我的项目中的静力学或单身人士了。
我将它们视为帮助程序,最终类具有用于在项目组件上或与它们执行特定任务的方法(合并数组,调整大小图像,上载/打印文件等)。因此,我想...最小化他们在我的项目中的分布。
例如,我没有发现在每个子控制器中传递Arrays
对象是最佳的,只是因为在基本控制器类的构造函数中,必须合并一些数组。
我想问:
Arrays
作为构造函数依赖项,并且 static 问题将得到优雅解决这条路。这是真的,还是有更好的选择? 我很欣赏你的任何观点。
非常感谢!
P.S:
以下是Arrays
课程,如果您需要查看它:
<?php
namespace MYMVC\Utils;
/**
* Arrays: utility class to handle operations on multidimensional arrays.
*/
class Arrays {
/* ------------------------------------------------------------- */
/* Keypath format: '{key0}/{key1}/{key2}/{key3}/{searched-key}'. */
/* ------------------------------------------------------------- */
/** Set the value in array at the specified keypath. [...] */
public static function setArrayValue(&$array, $keypath, $value, $delimiter = '/') { ... }
/** Get a tree structure from the specified keypath. [...] */
public static function buildArrayTree($keypath, $value, $delimiter = '/') { ... }
/** Check if the specified keypath exists in array. [...] */
public static function arrayKeyExists(&$array, $keypath, $delimiter = '/') { ... }
/** Get the array value from the specified keypath. [...] */
public static function getArrayValue(&$array, $keypath, $delimiter = '/') { ... }
/** Merge multiple multidimensional arrays. [...] */
public static function mergeMultipleArrays(/* func_get_args */) { ... }
/** Merge the top multidimensional array over the base multidimensional array. [...] */
public static function mergeArrays($base, $top) { ... }
}
答案 0 :(得分:-1)
像Arrays::mergeArrays
之类的东西并没有错。您不介意在课程中拨打in_array
或array_merge
,不是吗?如果您愿意,可以将Arrays
称为“实用程序”类,但我认为您不能对Files
执行相同操作。
如果您当前的问题是“我不想将xyz对象传递给每个子控制器”,那么通常您会有以下思路:
只需将DIC注入控制器即可。然后从中检索您的依赖项。这就是所谓的“服务定位器”,它被许多框架广泛使用。它的优点是,您可以仅在需要时以及需要时使用依赖项。但它有一系列的缺点。没有它你的对象就不存在,你的类也不容易被嘲笑。这就是为什么它被认为是一种反模式。
在控制器中明确地注入您的依赖项(即:Files
)。为什么你要隐藏你的控制器依赖于Files
的事实?这里唯一的问题是,特别是对于控制器,所有类的方法并不总是使用许多依赖项。这更像是一个性能问题,你可以想到以多种方式解决它(例如:
Action object)。
选择适合您的方式。