Php MVC项目控制器中的私有方法

Php MVC项目控制器中的私有方法,php,model-view-controller,Php,Model View Controller,如果我在MVC项目的控制器中有私有方法,可以吗?我是说,这是一个好的做法吗 我的意思是: 我的用户控制器中有一个方法设置,用于更改电子邮件和密码 public function settings($settings) { /** * Check if the user is logged in */ $auth = new Authenticate($this->user_type); if(!$auth->isUser()) {

如果我在MVC项目的控制器中有私有方法,可以吗?我是说,这是一个好的做法吗

我的意思是:

我的用户控制器中有一个方法
设置
,用于更改电子邮件和密码

public function settings($settings)
{
    /**
     * Check if the user is logged in
     */
    $auth = new Authenticate($this->user_type);
    if(!$auth->isUser())
    {
        redirect(SITE_ADDR.'/public/home');
    }

    switch ($settings)
    {
        default: 
            error_404(); 
            break;

        case "email":
            self::change_email();
            break;

        case "password":
            self::change_password();  
            break;
    }
}
正如您所看到的,这个方法中的开关正在从同一个私有类调用其他方法。这样做的原因是因为我不希望有人手动修改URL并访问这些方法,然后得到像这样的各种错误:
http://localhost/MVC/public/user/change_email
正确的URL具有以下结构:
http://localhost/MVC/public/user/settings/email

目前有两种私人方法-更改电子邮件和密码,但我计划有更多-添加个人资料详细信息(如真实姓名、描述等),可能连接facebook或其他社交媒体帐户,等等。我不希望我的
设置
方法太长


那么,您认为这是个好主意吗?

在任何OO上下文中,拥有私有方法都是非常好的。可见性修饰符,如
protected
private
用于保持代码模块化和封装。它们防止其他代码针对它编写,防止类外的其他代码调用这些方法。这一点的关键在于,您对调用什么有更多的控制,并且您有更多的信心在以后重构代码,而不必不确定是否需要保留某个方法以避免破坏其他代码。
private
方法只能从同一个类中调用,这大大减少了需要检查是否重写该方法的代码量

这与可公开调用的URL的关系是完全不同的问题。我认为可见性修饰符不应该是区分作为HTTP端点公开的方法和内部实现细节的主要方法。可见性修饰符用于控制代码耦合,HTTP端点应该由配置单独定义。许多框架使用可见性修饰符作为隐式映射HTTP端点的方便“安全”特性,这不一定是一种好模式

  • 以任何必要的方式编写好的OO代码;如果将一些代码分离成一个不需要公开的方法是有意义的,那么一定要使用
    private
    方法
  • 以合理的方式配置URL如何映射到类方法
  • 不要把这两件完全不同的事情混为一谈

  • 在任何OO上下文中都可以使用私有方法。可见性修饰符,如
    protected
    private
    用于保持代码模块化和封装。它们防止其他代码针对它编写,防止类外的其他代码调用这些方法。这一点的关键在于,您对调用什么有更多的控制,并且您有更多的信心在以后重构代码,而不必不确定是否需要保留某个方法以避免破坏其他代码。
    private
    方法只能从同一个类中调用,这大大减少了需要检查是否重写该方法的代码量

    这与可公开调用的URL的关系是完全不同的问题。我认为可见性修饰符不应该是区分作为HTTP端点公开的方法和内部实现细节的主要方法。可见性修饰符用于控制代码耦合,HTTP端点应该由配置单独定义。许多框架使用可见性修饰符作为隐式映射HTTP端点的方便“安全”特性,这不一定是一种好模式

  • 以任何必要的方式编写好的OO代码;如果将一些代码分离成一个不需要公开的方法是有意义的,那么一定要使用
    private
    方法
  • 以合理的方式配置URL如何映射到类方法
  • 不要把这两件完全不同的事情混为一谈

  • 是的,这是一个可以遵循的实践,只要项目需要它

    是的,这是一个可以遵循的实践,只要项目需要它

    在大多数情况下,这可能是一个不好的实践,因为控制器应该使用服务共享逻辑,并使用依赖注入接收这些服务,这不是MVC模式的固有特性,但最新的MVC框架使用它

    当您的控制器只调用服务,而本身不执行大量低级逻辑时,在控制器上创建指向这些服务或其操作的快捷私有方法真的没有什么好处

    尽管看起来确实比到处复制所有代码更可取,特别是如果有很多行代码的话


    但是如果你的控制器中有那么多的逻辑,这可能是一个迹象,表明你应该将一些东西转移到服务类中。

    在大多数情况下,这可能是一种不好的做法,因为控制器应该使用服务共享逻辑,并使用依赖注入接收这些服务,这不是MVC模式固有的,但最新的MVC框架使用它

    当您的控制器只调用服务,而本身不执行大量低级逻辑时,在控制器上创建指向这些服务或其操作的快捷私有方法真的没有什么好处

    尽管看起来确实比到处复制所有代码更可取,特别是如果有很多行代码的话


    但是,如果控制器中有那么多逻辑,这可能是一个迹象,表明您应该将某些内容移动到服务类。

    除了uri之外,我看不出调用函数di有什么区别