【发布时间】:2017-06-03 22:33:16
【问题描述】:
在我的 HMVC 项目中,我实现了一个 Arrays 类。它的 STATIC 方法总体上用于处理多维数组上的各种操作。除了这个类,我也使用类似的类:Files、Images、Printer、Messages、Classes 等。但我不想再在我的项目中使用任何静态或单例了。
我将它们视为助手,最终类具有用于仅在项目组件上或与它们一起执行特定任务的方法(合并数组、调整图像大小、上传/打印文件等)。因此,我想...尽量减少它们在我的项目中的分布。
例如,我认为在每个子控制器中传递 Arrays 对象并不是最佳选择,因为在基本控制器类的构造函数中必须合并一些数组。
我想问一下:
- 我实际上在基本控制器类中合并数组是错误的,还是真的会出现这种情况?
- 如果没有错,那么我只能选择将实用程序类
Arrays作为构造函数依赖传递,而static问题将通过这种方式优雅地解决。这是真的吗,还是有更好的选择?
我会很感激你的任何观点。
非常感谢!
附注:
这是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) { ... }
}
【问题讨论】:
-
真的应该注射吗? - 为什么应该注射?您是否需要能够将
Arrays类型替换为另一个类?Arrays是否需要其他依赖项?然后在你的课程中像Arrays::mergeMultipleArrays一样使用它。没关系。 -
@Federkun 谢谢你的回答。你问的好。我编辑了我的问题,以某种方式揭示我想要实现的目标以及我如何看待它。这些类本身是最终类,甚至不要求任何依赖项。只是被动砖作为其方法的封装。
-
由于您不需要通过注入一些依赖项来自定义助手的使用,您只需从您的类对助手进行一个简单的函数调用。您没有任何理由将您的
Arrays对象替换为该类的另一个子类型。 -
@Federkun 我刚刚意识到,像
Files这样的实用程序类实际上可以具有一个或多个依赖项(文件名、路径、类型等)。而且因为我不想再使用 static 了,所以我必须将它作为依赖项传递给需要的地方。你能根据这些变化给我一个分析器吗?我会很感激的。谢谢你。 P.S:不幸的是,我没有具体的例子来说明清楚,因为我只使用了早期在静态系统上开发时的例子。然后我只是静态地打电话给助手,一切都解决了。我不想再这样了。
标签: php oop design-patterns model-view-controller mvvm