Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php isset检查是否应该在依赖于会话有效性的服务中进行?_Php_Oop - Fatal编程技术网

Php isset检查是否应该在依赖于会话有效性的服务中进行?

Php isset检查是否应该在依赖于会话有效性的服务中进行?,php,oop,Php,Oop,我正在使用UserSession服务,代码如下 我的问题是,是否需要在get_id方法中执行isset测试,或者在我的情况下,是否应该由调用代码的控制器负责确保会话处于活动状态 如果未设置会话,则失败将导致注销,但我忍不住认为不应该在该服务中检查用户会话的有效性,因为使用该服务无论如何都需要有效的用户会话 我最终不得不在每个人身上都这么做 <?php namespace \App\Services; class UserSession { private $session;

我正在使用UserSession服务,代码如下

我的问题是,是否需要在get_id方法中执行isset测试,或者在我的情况下,是否应该由调用代码的控制器负责确保会话处于活动状态

如果未设置会话,则失败将导致注销,但我忍不住认为不应该在该服务中检查用户会话的有效性,因为使用该服务无论如何都需要有效的用户会话

我最终不得不在每个人身上都这么做

<?php

namespace \App\Services;

class UserSession {

    private $session;

    public function __construct()
    {
        $this->session = (object) $_SESSION;
    }

    public function get_id()
    {
        if(!isset($this->session->user->id))
            return false;

        return $this->session->user->id;
    }
}
有什么建议吗


我在想也许有一个方法是有效的,可能需要返回true或false。这样,在调用任何getter之前都可以检查会话的使用情况。

如果有50个方法检查有效会话只发生一次,而其他方法不需要重复代码,则应该以这种方式添加用户会话签入


是的,在尝试使用用户会话之前,请始终检查用户会话是否存在。您永远不知道会发生什么导致用户会话为空。

首先,您不应该避免混合返回类型。大多数情况下,最好的做法是返回预期的结果/类型或抛出异常

第二,你应该尽快失败。这意味着,一旦您知道需要用户会话才能继续,就应该检查它是否存在。您要么在类构造函数中,要么甚至在尝试实例化UserSession对象之前,例如通过工厂或构建模式


该类可以将$\u SESSION Superglobal的内容注入UserSession,以删除类依赖关系并使其更易于测试

我看不出有什么问题。最好把它放在get__id里,而不是放在不知有多少个地方。许多PHP方法在失败时返回something或false。这并不少见。例如,将CURLOPT_RETURNTRANSFER设置为一个选项。如果成功,它将返回stringon,如果失败,它将返回false。在我看来,双重检查总是更好的。但如果未设置$this->session->user->id,则无法以任何方式调用此脚本。然后,是的,这是没有必要的。我正在努力了解在实例化我使用的Pimple时如何处理错误。如果它在构造时失败,我就无法真正处理容器中的错误。我可以在控制器级别更精确地处理它,因为我可能需要记录导致错误的请求,因为在应用程序中不太可能永远不会设置UserSession。@BugHunterUK只是在不满足条件时抛出错误。这就是我最终要做的。注入$\u会话也有好处。