我应该为 User 类的唯一实例使用哪种模式?

2023-12-01

我有这个用户类

class User{
  private    $logged = false;
  private    $id;

  public function User() {
      //> Check if the user is logged in with a cookie-database and set $logged=true;
  }  

  public function isLogged() {}
  public function editPerms() {}

  //> other methods    
}

现在考虑到我不能在Where should i store the ref of my istance? 中登录超过 1 个用户(当然因为我们正在谈论单个 http 请求)。

情况如下:单例会很有用,但现在每个人都说单身人士是邪恶的(比如静态方法).

  • http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/
  • http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/

我可以做一个$GLOBALS['currentUser'] = new User();并且可以在任何地方访问它,但我认为这比单例更糟糕。

那我能做什么呢?
请注意我不需要save请求之间的此实例。我只需要一种方法在同一请求中访问我的框架中的此实例.

如果您想知道我现在为所有帮助对象所做的事情是服务容器(这被认为是不好的):

function app($class) {      //> Sample
    static $refs = array();

    if (!isset($refs[$class]))
        $refs[$class] = new $class();

    return $refs[$class];
}

//> usage app('User')->methods();

(即什么symfony 确实)


模式应该是一个有用的指南,就像以前成功的软件抽象的库一样。如今,人们常常将模式视为某种宗教,无论程序的背景如何,事情要么“正确”,要么“错误”。

考虑一下您想要实现的目标,并以对您有意义的方式进行规划。胡思乱想这个模式和那个模式之间的微小区别没有抓住重点,而且它不会让你的程序编写出来。学习方式doing!

HTH.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该为 User 类的唯一实例使用哪种模式? 的相关文章

  • PHP 换行符 (\n) 不起作用

    由于某种原因我无法使用 n使用 PHP 输出到文件时创建换行符 上面只写着 n 到文件 我尝试使用 n 同样 它只写 n 如预期 但我一生都无法弄清楚为什么在字符串中添加 n 不会创建新行 我也尝试过 r n但它只是附加 r n 到文件中的
  • 理想的 PHP 会话大小?

    我有一个 PHP 表单 抵押应用程序 大约有 400 个字段 该网站的流量会很低 对于进入 MySQL 数据库的 400 个字段 理想的会话大小是多少 In php ini我要设置什么 我应该设置我缺少的任何内容吗 会话的大小没有限制 但
  • PHP 中 file、file_get_contents 和 fopen 之间的区别

    我是 PHP 新手 我不太确定 两者之间有什么区别file file get contents and fopen 函数 什么时候应该使用其中一个而不是另一个 前两个 file http www php net manual en func
  • 如何使用 jquery ajax 将锚点的值发送到 php

    我正在尝试使用 jquery 将几个锚点的值发送到 php 文件 但我没有从 php 脚本中得到回调 div class result div a href value class star Star 5 a a href value cl
  • 重定向而不是 404 错误页面 - 状态代码不起作用 (Nginx)

    我目前正在迁移到 nginx 服务器 我尝试将其放入名为的 404 ErrorDocument 中404 php 如果我现在尝试访问http mydomain com 404 php 这按预期工作 它将我重定向到 Google 但是一旦我尝
  • 在 Drupal 中选择性地删除页面的样式表

    我正在尝试为首页制作不同的布局 在此过程中 我声明了名为 front page css 和 page front tpl php 的新样式表 我正在使用加载responsive sidebar css 的 Zen 子主题 我想删除 resp
  • 为什么 SORT_REGULAR 在 PHP 中产生不一致的结果?

    我正在开发一个类 它使 PHP 中的数组排序变得更容易 并且我一直在使用 SORT 常量 但是行为或SORT REGULAR 默认排序类型 似乎有所不同 具体取决于您在数组中添加项目的顺序 此外 我找不到任何模式来解释为什么会出现这种情况
  • PHP:如何发送电子邮件基础知识

    我想使用 PHP 从本地主机向其他人发送电子邮件 我需要做什么才能做到这一点 例如我需要安装邮件服务器吗 如果我没记错的话 有一种语言不需要邮件服务器来发送电子邮件 这样对吗 PHP ini里面有 邮件功能 如何配置这个 我在网上查了一下
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 如何在 Laravel 5 中的视图模板上显示会话数据

    我正在尝试在 Laravel 5 中的视图模板上显示会话数据 但是它似乎没有显示任何内容 这是我用来设置会话的代码 Session set bookingConfirmed BookingDates where id Session get
  • 正确的标头 php mysql blob 显示图像

    我正在尝试在我的 PHP 页面中显示来自 mysql blob 的图像 我知道这不是最佳实践 然后我会将其引入我的 iOS 应用程序中 我在设置页面标题时遇到问题 我认为需要将其设置为图像 所以 这显示了图像 但我不相信页眉是正确的 hea
  • Opencart 的 $this->config->get('module_var_name')

    我正在尝试自定义 Opencart 支付模块 我看到很多地方都使用了配置信息 但我找不到任何创建正在使用的变量的内容 我知道在管理页面中 如果我选择 paypal 标准 我可以设置所有 配置 信息 但我找不到强调它的 模型 是否有模型 我希
  • PHP别名@函数

    我是 PHP 新手 看到一些使用 前缀调用函数 如 mysql ping 的示例 我感到很困惑 它是做什么用的 谷歌搜索 搜索没有太大帮助 因为 被丢弃并且 别名 不是足够好的关键字 抑制错误 警告和通知 如果你用自定义的方式补充它 你可以
  • Laravel 上传前如何压缩图像?

    我正在制作一个图片库网站 用户可以在其中上传任何图像 它们将显示在前端 我需要在不影响图像质量的情况下压缩图像 以减小图像大小 以便页面加载速度不会影响那么大 我使用以下代码来上传图像 rules array file gt require
  • 使用 IntlDateFormatter 转换非公历日期

    我应该如何使用将非公历日期转换为其他日历类型IntlDateFormatter 我要转换 1392 01 02 from persian to islamic日历 我尝试了以下代码 但它没有转换日历 formatter IntlDateFo
  • PHP函数返回值到html标签

    我想获取函数的返回值并将其显示到特定的id 在我的 Class php 中 我有一个名为 login 的函数 用于验证密码是否正确 不正确
  • 我应该使用排队系统来处理付款吗?

    我在用着Slim https www slimframework com和这个结合Stripe 的 PHP 库 https stripe com docs api php在我的应用程序中处理付款 一切都很好 但是直到最近 我在我的系统中发现
  • SVG 转 JPG / PNG

    有没有工作模块可以convert a SVG image into像素格式如JPEG or PNG 看看蜡染工具包 具体来说是光栅化器 http xmlgraphics apache org batik tools rasterizer h
  • 进度状态报告模式

    我正在实现需要显示进程栏 或进度百分比 的长时间运行的进程 长时间运行的过程的整体逻辑很复杂 各种分页数据检索 因此 我最终在代码中的不同位置硬编码了大量百分比 在更新完成百分比时 什么被认为是最佳设计模式 我发现 JFace 周围使用的模
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php

随机推荐

  • Selenium RC 中的 XPath 或 CSS 与 Java 不起作用

    我正在尝试使用 selenium RC 自动执行以下场景 打开Goog le主页并在搜索框中输入 软件 然后单击搜索按钮 单击 Google 搜索检索到的多个链接中的第一个链接 由于我看不到这些链接的 name 或 id 属性 并且该链接的
  • 如何在ASP.NET Core 1.0 RC2项目中使用PCL

    我想使用带有目标的简单 POCO 仅无其他依赖项 PCL Xamarin Android 通用Windows 10 ASP NET 核心 1 0 在 ASP NET Core 1 0 RC2 项目中 全部在同一解决方案中 我已将此导入添加到
  • IDisposable.Dispose 在 using 块中发生异常后永远不会被调用

    我从很多来源了解到this and this那Dispose的方法IDisposable如果在 a 中抛出异常 则始终会被调用Using堵塞 那么我有这个代码 static class MainEntryPoint static void
  • 打开lucene索引时出错:Map failed

    我尝试使用 1 2 3 4 GB 内存启动该进程 但仍然出现相同的错误 有小费吗 gc 日志显示它正在运行 GC 即使它有足够的内存 但这个错误可能与使用 NIO 的内存映射文件有关 有人见过这样的事情吗 如果是这样 你是如何解决的 jav
  • 如何修复 Qt 5.6 beta 和 VS2015 的 QT VS Add-in?

    我没有自己编译 Qt 而是使用 Qt 官方网站的安装程序 5 6 beta 几天前就可用了 安装成功 Qt 文件夹包含 bin 文件夹 其中包含 qmake 和所有内容 在 Qt Creator 中构建应用程序是可行的 但是 当我尝试使用
  • 如何在 PyTorch 中使用 2 张图像作为训练样本?

    I just begin learning deep learning and my first homework is to finish an leaves classification system based on convolut
  • 如何在一个活动中使用java类?

    如何在一个活动中使用 Java 类 我的意思是将该活动的不同组件分布在一堆 Java 类中 我对 Android 有点陌生 这是我迄今为止尝试过的 MainActivity java package com example alex mya
  • 使用图形 API 发布到 Facebook 用户的留言墙上

    我是 facebook 应用程序开发的新手 我正在尝试使用以下命令在用户墙上发布简单的文本但这似乎不起作用 有什么想法我可能会出错吗 检查您是否有权从应用程序发帖 将 app id 添加到您的通话中
  • 记住带有 localstorage onclick 的复选框

    我正在尝试为 Chrome 扩展程序创建一个选项页面 第一部分将值设置到本地存储中 检查 true 并取消选中 false 如果用户在其他时间回来 第二部分应该更新复选框 并且设置将应用于该复选框 我的问题是 当用户刷新或关闭窗口并返回时
  • Resharper string.format 快捷方式

    我经常发现自己在写作 var message Hello 0 然后返回并输入 var message string Format Hello 0 world 如果当我输入字符串时 当我将 放在末尾时 resharper 发现字符串中有一个参
  • 如何在android中按下后退时关闭我的应用程序

    我想在按下设备的后退按钮时进入主屏幕 我正在使用此代码 public void onBackPressed this finish return 按BACK键将有效调用finish 为你 无需捕获 BACK 键 我假设您的问题是 当您按 B
  • android相机导致空指针异常

    我的应用程序在尝试使用相机拍照时出现空指针异常 我的应用程序这样调用相机 go to camera app Intent intent new Intent android media action IMAGE CAPTURE intent
  • 从retrofit2获取字符串响应体

    我正在使用 Retrofit1 旧样式 GET loginUser public Call
  • 跟随手指的旋转动画,遵循圆的外部路径的 uibuttons

    我正在寻找一些指导来开始弄清楚跟踪手指运动并沿着圆的外部路径移动 UIButton 集合的动画 我想象它会有一种左轮手枪的感觉 就像每个都在底部锁定到位一样 或者像滑动其中一个幻灯片插件一样 提前致谢 示例代码在GitHub 其实并不是那么
  • Google 语音短信意图

    现在我正在尝试使用填充的号码创建短信意图 Intent sendIntent new Intent Intent ACTION VIEW sendIntent setFlags Intent FLAG ACTIVITY NEW TASK s
  • 改变方向时闪光灯关闭

    我创建了一个 Android 应用程序 它允许用户通过按下按钮来打开和关闭闪光灯 如果用户打开闪光灯并改变方向 灯就会关闭 为什么会发生这种情况 请参阅下面我使用的代码 cam Camera open final Parameters p
  • VimTutor 方向键 v/s hjkl

    VimTutor 在第一课中说道 注意 光标键也应该起作用 但是使用 hjkl 你会 能够 一旦习惯了 移动速度就会更快 真的吗 然而 我发现它们之间没有任何区别 使用 hjkl 和箭头键之间真的有区别吗 使用 hjkl 时 您不必将手从触
  • springSecurityFilterChain 空指针异常

    当我尝试运行项目时 Tomcat 返回异常 有人可以帮助解决这个问题吗 配置类 https github com intrade inventory blob master src main java com springapp mvc I
  • 通过单击没有输入字段的图像来打开 JQuery Datepicker

    我想在用户单击图像时打开 JQuery Datepicker 没有随后出现所选日期的输入字段 我将通过 Ajax 将输入的日期保存到服务器 目前我有这个代码 img src someimage gif document ready func
  • 我应该为 User 类的唯一实例使用哪种模式?

    我有这个用户类 class User private logged false private id public function User gt Check if the user is logged in with a cookie