-1

我正在开发一个 PHP MVC,但努力处理设计的某些方面,让所有东西都可以轻松访问用户信息,这真的让我很困惑。

我确实有 User 作为一个抽象类,所以你可以使用User::getUserId(),但我不确定这是正确的方法吗?

我现在已将其更改为以下内容,但它不起作用。

问题

假设我有一个基本控制器,我想在每次运行时实例化 User 类:

控制器

class controller{

    public $user;

    function __construct(){

        $this->user = new User();
        $user->sessionRefresh();
        $user->getUserId();

    }
}

然后我有一个实例化的用户模型类:

用户模型类

class User{

    var $userId;

    function sessionRefresh(){

        if (isset($_SESSION['userId']) && $_SESSION['created'] + 15 * 60 < time())                  
            session_regenerate_id();
    }

    function getUserId(){

        $this->userId = $_SESSION['userId'];
    }
}

然后我有更多扩展默认控制器的控制器:

论坛控制器- 非常基本,只是为了演示我正在尝试的内容

class forumcontroller extends controller{

    function __construct(){

        require 'templates/forum.php';
    }

}

论坛模板- 非常基本的示例

<html>
<title>Forum</title>
<body>
    <div>Welcome User: <?=$user->userId;?></div>
</body>
</html>

我在做什么完全错了吗?

我最近才尝试在 PHP 中从程序性飞跃到 mvc/oop,显然它仍然让我感到困惑。

4

2 回答 2

2
  1. 使用$this->user->userId;代替$user->userId;

  2. 你必须回声....<? echo $user->userId; ?>

  3. 在有人帮助时停止编辑您的代码

  4. 感谢投反对票

于 2012-10-30T16:40:01.137 回答
0

是的,就 MVC 设计模式而言,您所做的完全错误。部分原因在于 MVC 是一种高级模式。在您充分了解 OOP 之前,您甚至不应该尝试使用它。

所以..您的代码存在问题。

  • 当您使用includeorrequire时,您“嵌入”的文件在使用它的范围内。阅读变量范围模板

  • 模型不是类或对象。它是一个层,其中包含不同类型结构的多个结构。应该涵盖简短的版本。

  • 与实例的交互User将是领域业务逻辑的一部分,这是模型层的职责。这些都不应该在表示层(主要由视图、控制器和模板组成)中。

  • 视图不是模板。在 MVC 设计模式中,视图是负责大多数用户界面逻辑的结构。决定应该返回什么样的响应(包括由多个模板、一些 XML 或 JSON 文件组成的 HTML,可能只是一个 HTTP 标头)。

  • var语句在 PHP4 中用于定义类变量。在 PHP5 中,我们有public,privateprotected.

  • 一般来说,你不应该在类中有公共变量。打破封装。

  • 类构造函数不应执行计算。它使代码难以测试。

更新

底线是:**远离 MVC* 至少 3 个月。在充分利用和理解 MVC 设计模式之前,您需要了解更多关于 OOP 的知识。

我会推荐这篇文章底部的材料清单。从前两本书开始,然后观看讲座,然后是 PoEAA(列表中的最后一本)书。

于 2012-10-30T16:56:05.663 回答