在 PHP 中组织小函数的正确方法

2024-02-03

我有一堆小实用程序PHP我根据自己的情况为解决不同的脚本问题而创建的函数。像 UUID() 和 trackUserActivity() 等函数。这些函数有很多并且每天都在增加。

假设我有大约 50 个不同的小函数。并为我的应用程序获得了大约 100 个不同的脚本。有时,这 100 个脚本必须调用其中 3 个甚至 5 个函数,有时它们只调用 50 个函数中的一个。

我想知道你们这些高手是如何组织你们这些功能的?要么将所有函数放在一个单独的文件夹中,每个函数放入一个单独的文件中并单独包含,要么创建一个类并将所有这些函数添加到其中,并包含该类调用带有对象实例化的函数?

我认为创建一个包含 50 个函数的类并包含该类(即使是调用单个函数)也不是一个好主意。但我想确定一下。

我发现这个问题在组织小型公用事业功能 https://stackoverflow.com/questions/1618895/organize-small-utilities-functions但这是特别针对 Java 的,它似乎不适合 PHP 的情况。

我搜索了其他可以提出这个问题的 StackExchange 站点,但找不到更好的代码管理地方。我检查了https://sqa.stackexchange.com/ https://sqa.stackexchange.com/ and https://pm.stackexchange.com/ https://pm.stackexchange.com/但似乎没有一个地方适合提出这样的问题。


The spl_autoload_register() https://www.php.net/manual/en/function.spl-autoload-register.php函数是让事情井井有条的便捷方法。您可以根据需要使用它来加载静态类方法,方法是将其放在'init.php'文件,您在每个脚本的顶部都需要该文件。下面是一个 Hash 类的示例,其中包含创建盐和哈希的静态方法:

<?php
  require_once('init.php');
  $salt = Hash::salt(32); 
  $pw   = Hash::make($_POST['password'], $salt);
?>

init.php and 类/Hash.php文件看起来如下所示:

初始化.php:

<?php
  spl_autoload_register(function($class) {
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/' . $class . '.php';
  });
?>

哈希.php:

<?php
class Hash {
  public static function make($string, $salt = '') {
    return hash('sha256', $string . $salt);
  }

  public static function salt($length) {
    return base64_encode(openssl_random_pseudo_bytes($length));
  }
}
?>

The spl_autoload_register()当函数在代码中第一次遇到实例化或静态方法的使用时,它会根据您作为参数提供的函数找到适当的类。

您可以通过将相关函数分组为静态方法来利用这一点。例如,我的classes特定项目的目录有:

Config.php              Cookie.php           DB.php
Err.php                 FormatError.php      Hash.php
Input.php               MismatchError.php    Redirect.php
RequiredFieldError.php  Session.php          StringLengthError.php
Token.php               UniqueItemError.php  User.php
Validate.php

其中包含彼此相关的静态方法等。仅当 Php 在包含 init.php 文件的任何脚本中的任何位置遇到它们的名称时,它们才会被加载。

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

在 PHP 中组织小函数的正确方法 的相关文章

  • 在 Codeigniter 中显示来自连接的数据

    我正在使用简单的联接从两个数据库中提取数据 这是模型中的连接 function com control this gt db gt select this gt db gt from comments this gt db gt join
  • 如何使用 PHP 解释 HTML5 输入日期值

    我需要让用户选择一个日期 最好采用 dd mm yy 格式 我决定尝试新的 HTML5 输入日期类型 但是我不知道如何解释它在服务器端给出的值 我得到的值是 yyyy mm dd 我怎样才能做到这一点 如果用户使用不支持它的旧版浏览器怎么办
  • 我如何加入 Eloquent:关系?

    我的查询是这样的
  • Paypal Rest API - 来自批准 URL 的令牌生命周期

    我使用 Paypal Rest API 我的问题是 有多长token来自批准 URL 有效吗 我想将此令牌 也包含我的令牌 存储到数据库并生成带有我的令牌的链接 稍后 如果我单击此链接 将我的令牌替换为 paypal 令牌 我想重定向到 p
  • 从“Google 我的商家”获取 PHP 格式的营业时间

    我需要一些 PHP 代码来从我的 google 我的商家列表中提取我的营业时间 这在我的本地计算机上有效 但当我实时推送网站时不起作用 此代码停止我的 css 渲染并且不加载任何其他内容
  • php - 当存在 CDATA 时,将 xml 转换为 json 不起作用

    如果我使用以下php代码来转换xml to json I get Company fcsf Details n fgrtgrthtyfgvb n 但是 如果我使用CDATA in the Details元素如下
  • PHP 类扩展字符串变量

    是否可以声明一个类并让它扩展一个变量 class Child extends parentClass 是的 它是通过 eval 实现的 但不建议这样做
  • 如何将 php 变量传递给 ajax

    我有一个自动加载页面 我需要能够基于变量检索数据 因为该变量必须返回特定值 下面的代码基于检索所有数据 但我只需要基于 list 的少数数据 Page php
  • 在 IF 语句内部创建的变量是否也可以在 IF 语句外部使用?

    如果你有这样的 if 语句 您是否能够在 if 语句之外访问 c 变量 如下所示 In PHP if没有自己的范围 所以是的 如果你在里面定义了一些东西if语句或块内 那么它将可用 就像您在外部定义它一样 当然 假设块内或块内的代码if语句
  • Codeigniter:将 sess_match_ip 设置为 FALSE 是否仍然安全

    我正在开发一个网站 来自某些国家 地区的访问者面临 codeigniter 缓存系统的问题 缓存在一两个请求后被删除 经过深入调查后 我将 sess match ip 和 sess match useragent 设置为 FALSE 现在一
  • Symfony2 / Twig:生成备用绝对 URL 路径以与 CDN 一起使用?

    This 堆栈溢出解决方案 https stackoverflow com questions 7358470 twig asset with cdn using symfony 2几乎回答了我的问题 但我想生成 CDN urlTwig不仅
  • 动态创建的数据源未传递到 CakePHP 中的关联模型

    我有一个模型 汽车 该汽车有几个关联的模型 让我们考虑其中一个与hasMany关系 轮 在我的 CarsController 中 我使用以下代码动态生成数据源 schemaName this gt Session gt read User
  • 无法登录 mediawiki:为了防止会话劫持而取消?

    我多年来一直使用托管在 AWS EC2 实例上的私有 mediawiki 我认为某些扩展出了问题 特别是在数学渲染过程中停止了 所以我尝试使用 Google Chrome 浏览器重新加载页面 缓存全部被删除 之后 我无法登录并看到此消息 您
  • 使用 nuxtjs 登录 laravel sainttum 后出现 401(未经身份验证)错误

    我已经安装了 laravel v 7 30 4 nuxtjs v 2 15 7 当我使用 nuxtjs auth 模块登录我的 laravel sainttum 后 当 nuxt 尝试获取用户时 laravel 响应 401 错误 未经身份
  • str_ireplace 与 str_replace 一样工作

    我需要用 url 字符串中的小 ascii 字符替换所有本地字符 包括大写字母 str echo str ireplace array array c c d s z str 结果 c c d s z 我期望 c c d s z c c d
  • php 日期函数和 Carbon 哪个更快?

    Carbon 是 DateTime 的简单 PHP API 扩展 我想知道我们可以通过 Composer 安装 Carbon 来使用日期时间函数 php 日期时间函数和 Carbon 哪个更快 我对您的评论做了一些测试 比较了 DateTi
  • 清理 php 中的句子

    标题可能听起来很奇怪 但我有点尝试设置这个 preg replace 来处理文本区域的混乱写入者 它必须 如果有感叹号 则不应连续出现另一个感叹号 如果有 则逗号胜出 并且必须是 当昏迷前有一个 空格时 应将其减少到零 该句子不能以逗号开头
  • 最佳实践:在 PHP 中导入 mySQL 文件;分割查询

    我遇到了一种情况 我必须更新共享托管提供商上的网站 该网站有一个 CMS 使用 FTP 上传 CMS 文件非常简单 我还必须导入一个大的 相对于 PHP 脚本的范围 数据库文件 未压缩时大约 2 3 MB Mysql 已关闭 无法从外部访问
  • 使用 Composer CLI 将数据添加到额外属性

    根据文档extra的财产composer json 架构 https getcomposer org doc 04 schema md extra 允许设置 供脚本使用的任意额外数据 出于脚本目的 如果可以将数据添加到extra通过命令行属
  • PHP - 将文件系统路径转换为 ​​URL

    我经常发现项目中的文件需要从文件系统和用户浏览器访问 一个例子是上传照片 我需要访问文件系统上的文件 以便可以使用 GD 来更改图像或移动它们 但我的用户还需要能够从类似以下的 URL 访问文件example com uploads myp

随机推荐

  • 使用 org.postgresql.core.Utils.escapeLiteral 足以防止 SQL 注入吗?

    在构建 SQL 查询和更新以提交到我的数据库之前 我需要清理一些用户输入的数据 我知道最好使用准备好的陈述 https www owasp org index php SQL Injection Prevention Cheat Sheet
  • 为什么 C++ 编译器不做更好的常量折叠?

    我正在研究加速大部分 C 代码的方法 该代码具有用于计算雅可比的自动导数 这涉及在实际残差中做一些工作 但大部分工作 基于分析的执行时间 是计算雅可比矩阵 这让我感到惊讶 因为大多数雅可比都是从 0 和 1 向前传播 所以工作量应该是函数的
  • 导入 R. (android)

    我已经通过 Stack Overflow 进行了搜索 因为我知道这是一个常见问题 但似乎没有一个解决方案适合我 这包括清理我的项目 删除所有导入 删除项目并完全重新开始 我正在使用 Eclipse 专门用于 mac 上的 android A
  • 使用最大流算法查找网络的边缘连通性

    我想使用最大流算法 Edmond Karp Ford Fulkerson 算法 找到无向图的边连通性 即要删除以断开图连接的最小边数 我知道我可以通过找到图的每两个节点之间的最小最大流量来完成此任务 但这将导致 O V 2 数量的流量网络
  • Twitter Bootstrap CSS 静态流体表单定位

    我正在使用 Twitter Bootstrap 框架尝试获得如下布局 现在看起来是这样的 jsFiddle 全屏 https jsfiddle net flackend YxKfc show jsFiddle https jsfiddle
  • Spring Boot 关闭钩子

    如何注册 添加在 Spring Boot 应用程序关闭时触发的自定义关闭例程 场景 我将 Spring Boot 应用程序部署到 Jetty servlet 容器 即没有嵌入式 Jetty 我的应用程序使用 Logback 进行日志记录 并
  • 夏令时持续时间

    我有一个对象Shift 有两个字段 startDateTime and endDateTime as DateTime来自乔达时间 我的轮班包括英国夏令时的变化 它开始于25 03 2017 13 00并结束于26 03 2017 02 0
  • 如何在C#中动态阻止网站?

    我想从用 C 编写的 Windows 服务动态阻止某些 URL 我不想通过写入主机文件来做到这一点 例如我想阻止该网址http example com 在所有浏览器中 但也会阻止http example com another早上 7 点到
  • Objective C /C 中的命名约定,以“_”开头?

    我看到 ppl 定义变量是这样的 b2World world b2Body body CCSprite ball 代替 b2World world b2Body body CCSprite ball 我熟悉第二个 但不熟悉第一个 于是 我查
  • css 显示:表格第一列太宽

    我有一个像这样的 css 表设置 div class table div span name span span details span div div 表格的 css 是 table display table width 100 ta
  • 获取 PrintDialog 的模式对话框句柄

    我在 net 2 0 上有一个 Windows 应用程序 在Form1 我打开一个PrintDialog 如何从我的代码中获取该对话框的句柄 我尝试了很多win32功能 EnumWindows EnumChildWindows FindWi
  • 如何禁用 React JS 应用程序的源映射

    我的反应文件夹结构如下 我没有使用过 create react app 版本 我尝试使用GENERATE SOURCEMAP false 但这没有用 在哪里可以找到 map 文件 我怎样才能删除这些文件 我找不到构建文件夹 我尝试使用下面的
  • 如果名称和日期匹配两个 API JSON 数据,如何求和?

    有两个 API 请求 URL 这是第一个 API 请求 URL 和数据来自 http 127 0 0 1 8000 api onlineUserData onlineUserData Month Amania Shyral Dorpan N
  • 将 XML 发布到经典 asp 页面并检索页面上的发布数据

    为了在经典的 ASP 页面上发布数据 我使用下面的代码 Dim stringXML httpRequest postResponse stringXML
  • 异常与验证

    我刚刚遇到一个捕获异常的属性设置器 所有异常 我知道这很糟糕 但与这里无关 并且only记录它们 首先 我认为也应该通过他们 当您可以立即知道出现问题时 为什么要等待崩溃和日志研究呢 然而 我的主要问题是 我是否要验证无效的日期值 将 Ru
  • Highcharts:图表无法通过缩小屏幕来正确调整大小

    我正在使用 HighCharts 4 0 4 并且我有一个带有自定义图例的图表 如下所示 div class wrapper div class element div div div div class legend Legend div
  • 找不到tools.jar。请检查 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 是否包含有效的 JDK 安装

    FAILURE Build failed with an exception What went wrong Execution failed for task react native linear gradient compileDeb
  • 按下键盘上的“完成”时如何不关闭键盘

    当用户按下软键盘上的 完成 时 键盘关闭 我希望它只有在特定条件成立时才会关闭 例如 密码输入正确 这是我的代码 在按下 完成 按钮时设置监听器 final EditText et EditText findViewById R id et
  • 了解 Ruby on Rails ActiveRecord 模型访问器

    我的模型 DataFile 有一堆我想从模型外部设置的字段 例如 file DataFile new file owner 123 现在 据我所知 我必须在模型中为我想从外部修改的每个字段放置一个 attr accessor field 然
  • 在 PHP 中组织小函数的正确方法

    我有一堆小实用程序PHP我根据自己的情况为解决不同的脚本问题而创建的函数 像 UUID 和 trackUserActivity 等函数 这些函数有很多并且每天都在增加 假设我有大约 50 个不同的小函数 并为我的应用程序获得了大约 100