我想创建一个助手重定向函数,如下所示:
/**
* Just an example of using redirect()
*/
public function validate_something() {
if (1 == 0) {
$this->redirect(\'register\');
}
}
但是,在
public function redirect()
, 我想使用一些只有在WordPress核心加载后才可用的功能,例如
get_site_url()
.
考虑到这一点,我创建了一种中间函数,如下所示:
/**
* Receives a redirect request and passes it to an add_action
*/
public function redirect($to) {
$this->to = $to;
add_action( \'init\', [$this, \'redirect_wp\'], 10, 1 );
}
/**
* Processes an redirect request
*/
public function redirect_wp() {
header(\'Location: \'.get_site_url().\'/\'.$this->to);
exit;
}
然而,
redirect_wp()
从未调用。此外,我觉得自己在架构上做错了什么,但我不知道到底是什么。
请考虑到这些重定向方法在实时代码中要复杂得多,例如通过会话传递错误消息和旧输入。上面的代码只是结构的一个示例。
SO网友:Mark Kaplun
核心问题是您没有编写OOP。OOP是关于识别系统中的对象,而不是操作。如果您想识别操作,最好遵循功能设计范式(使用wordpress挂钩系统,功能设计更有意义)。
在您的情况下,重定向是一个操作,可能遵循对象状态转换,因此它不应该是类的外部API。
当然,这种情况下的对象可以是“重定向控制器”,或者更好的是“浏览器”对象,但对于大多数人来说,这将是一个太多的抽象级别。
请考虑到这些重定向方法在实时代码中要复杂得多,例如通过会话传递错误消息和旧输入
因此,这是一个复杂的决策树的情况,但听起来没有任何对象状态转换,因此它实际上不应该是对象的一部分,至少不应该超过效用函数。