PHP的三种简单实用的传参方式

2023-05-16

首先声明,本干货的观点仅代表个人观点,拿出来和大家唠叨唠叨。
最近在写代码的时候,发现了一个有趣的事情。就是我创建了一个新的函数,但是因为各种需求,各种功能设计的原因,函数的形参数目达到了10多个之多。
而这个时候,由于本函数是一个公共函数,所以被调用的地方十分多,当这个函数的形参需要增删改的时候,可谓牵一发而动全身(当然,出现这种情况就应该想到是不是设计有问题了,耦合度这么高,但这次先不谈这个),所以针对这种情况,我分别思考了3种最常用的传参方式。

第一种
直接传参,每个参数一个个的排好队写上,例如:
在这里插入图片描述
图片来自睿江云计算

优点:

  1. 传入的参数清晰,明确可以知道传入参数有多少个,分别代表什么意思,从语义上一目了然。
  2. 调用方便,调用者直接传参,无需对参数进行处理加工。
  3. 对新手来说更加友好,更容易理解。

缺点:

  1. 形参太多,代码失去了美感,太随性了。
  2. 当某个参数需要改动的时候,简直是牵一发而动全身,比如$param5改为选填参数,并且默认值为test:
    在这里插入图片描述
    图片来自睿江云计算

缺点很明显,这个时候由于php参数顺序的问题,选填参数必须在最后,所以所有调用者都需要起码把原来的param5去除,放在参数最后位置,改动代价高。
总结:当参数少的时候,可以使用直接一个个参数传递,这样是最好的,但是当参数过多,或者改动需求大的时候,这种方法无疑是繁重的。

所以针对上面这种,当参数数量过多的时候,可以使用方法二:

第二种
把参数组合成一个数组的形式,整一个数组当做参数进行传递。例如:
在这里插入图片描述
优点:

  1. 代码更加整洁了。
  2. 代码更加灵活,现在就算有一个参数需要改动,也无需修改函数的参数,只需要在调用者处增加参数即可。

缺点:
3. 没有了php的语法限制。例如没有了string这种的类型限制,没有了带默认值的选填参数的语法限制。这样子就需要你做多一层参数的检查。
4. 参数可读性差了。函数的数组里面有哪些参数是不能通过形参看出来的,需要查看调用者的数组组成。
总结:总体来说这种方法可以解决第一种传参方式的弊端,但是也自身带来了更加大的弊端,参数的限制需要另外增加一层钩子去处理,可以说是性价比比较低的一种方法。

综合上面两种方法的利弊,我总结出第三种传参方式:

第三种
传递一个数据结构对象当做参数,例如:
在这里插入图片描述
优点:
5. 参数为一个数据结构,保证数据的完整性。就是传进来的数据结构必然能包含所需的参数。
6. 当参数需要更加或者减少的时候,只需要修改数据结构模型的对象属性即可。
7. 把数据的控制和限制可以统一放在模型层进行处理。

缺点:
1.可能需要多个数据结构模型。
总结:总体来说这种方法可以比较全面的解决第一第二种方法的弊端,就是需要建立多种数据结构模型,增加了代码量。

以上就是介绍的3种传参的种类,这是一个细节性,场景性的问题,不知道能不能明白个中意思呢?

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

PHP的三种简单实用的传参方式 的相关文章

  • 如何使用 PHP 正确添加跨站请求伪造 (CSRF) 令牌

    我正在尝试为我网站上的表单添加一些安全性 其中一个表单使用 AJAX 另一个表单是简单的 联系我们 表单 我正在尝试添加 CSRF 令牌 我遇到的问题是令牌有时只显示在 HTML 值 中 其余时间 该值为空 这是我在 AJAX 表单上使用的
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  • 如何使用 php 发送服务器错误响应?

    一旦用户点击删除按钮我的 jQuery 脚本要求服务器删除所选项目 现在我想要我的php发送成功或错误响应的脚本 是否有可能触发错误回调万一该项目无法删除 Thanks 我的 jQuery 代码 ajax type post url myA
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 为什么 iconv 在 php:7.4-fpm-alpine docker 中返回空字符串

    给出以下代码
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 在 PHP 中使用 phpseclib 时出现 RSA 问题

    我正在尝试在 phpseclib 中使用 RSA 实现 我认为在函数中执行一次代码并重新使用该函数会更容易 当我尝试向代码发送短信时 我收到一条错误消息 提示 解密错误 测试还让我意识到每次代码运行时密文都是不同的 所以我显然在那里做错了什
  • 表单提交后如何保留选择字段中的选定值?

    我有一个用于将票证上传到数据库的主页 我有一个选择字段 我想保留用户在提交表单之前选择的值 但它没有发生 这是我选择字段的代码
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 硬盘安装Debian与Xp双系统

    发个debian 6 0的简单安装教程 2009年10月写了个 debian lenny的简单安装教程 xff0c 前段时间一直盼望的6 0 squeeze终于正式发布了 xff0c 所以在lenny的教程基础上进行了修改 xff0c 以满
  • c语言链表及其基本操作

    链表及其基本操作 文章目录 链表及其基本操作 一 链表是什么 xff1f 二 链表是如何实现的1 创建链表2 输出链表 三 基本操作 xff08 增删改查插 xff09 1 查找结点2 删除结点3 插入结点4 清空结点 做为一名 新生蒟蒻来
  • 湖南大学第十六届程序设计竞赛

    湖南大学第十六届程序设计竞赛 https ac nowcoder com acm contest 18196 description D 遇到这种题 xff0c 其实可以去大胆点找规律 正解是对于排位的期望 xff0c 我们只需要在意排的位
  • VS2010中CString Format出错

    VS2010中 Format 用法 xff1a 我在项目中需要实现一个字符串的转化 xff0c 代码如下 xff1a CString mess int x y x 61 640 y 61 480 mess Format 34 当前为 xff
  • 数据库MySQL安装方法:官网下载安装、国内镜像源安装

    一 官网下载安装 xff08 MySQL Download MySQL Yum Repository xff09 下载rpm包 xff0c 上传到虚拟机上 xff08 rz命令 xff09 root 64 localhost ls 在官网下
  • 输出函数print的用法

    print函数的作用 xff1a 可以将想要展示的内容输出在d IDLE上或者输出在文件中 print xff08 xff09 函数的使用 xff1a 1 print xff08 xff09 函数输出的内容可以是数字 2 print xff
  • 2021“MINIEYE杯”中国大学生算法设计超级联赛

    2021 MINIEYE杯 中国大学生算法设计超级联赛 1006 Given a sequence of integers of length n find the shortest consecutive subsequence witc
  • ac自动机

    https blog csdn net lleozhang article details 82782723 https www cnblogs com vongang archive 2012 07 24 2606494 html htt
  • 基环树 最大独立集

    基环树 xff0c 也是环套树 xff0c 简单地讲就是树上在加一条边 它形如一个环 xff0c 环上每个点都有一棵子树的形式 因此 xff0c 对基环树的处理大部分就是对树处理和对环处理 显然 xff0c 难度在于后者 在基环树中 xff
  • 有向图无向图找环

    https codeforces com contest 1607 problem F 练习题 xff08 有向图 题解 xff1a https www cnblogs com handwer p 15506706 html E8 B5 B
  • 《机器人知识结构图》思维导图,探索人工智能领域

    随着时代快速发展 xff0c 经济快速进步的趋势 xff0c 人工智能领域越来越被重视 xff0c 它是一门边缘学科 xff0c 属于自然科学和社会科学的交叉界限 实际应用的课程非常多 他的研究范畴又包括了自然语言处理 xff0c 知识表现
  • 微信小程序的两种视频录制方式

    曾有小伙伴询问小编能不能在小程序内实现视频录制 xff0c 今天小编就来给大家分享小程序视频录制两种方式 方法一 wx chooseVideo xff0c 这个api微信会在下方弹出选择视频和拍摄的两种选项 xff0c 因为这次主要是讲拍摄
  • 如何使用app原生上传替代uniapp的uploadfile接口

    uniapp简介 uniapp是近两年来比较火的号称开发者编写一套代码 xff0c 可发布到iOS Android Web xff08 响应式 xff09 以及各种小程序的一个平台 xff0c 它提供了各种丰富的API文档让开发者快速的完成
  • 如何用electron高度自定义制一个系统菜单栏?

    背景 最近在做一个实时聊天的PC客户端 xff0c 遇到这样一个任务 xff0c 在客户端接收到其他用户消息的时候要闪烁系统托盘图标 xff0c 并且在鼠标滑到系统托盘的时候显示未读消息的菜单栏 xff08 对 xff0c 就是类似QQ的消
  • OPENVIDU实现网络质量检测统计

    1 前言 在WebRTC中 xff0c 我们需要对当前的音视频情况进行监控 xff0c 便于对音视频质量有一个了解 xff0c 同时可以用来分析定位音视频卡顿模糊等问题 WebRTC提供了一个标准的解决方案 xff1a 标准详情 基于此标准
  • OPENVIDU实现同一用户同时发布多个流媒体

    1 前言 OPENVIDU这个库暂时是不支持在同一个会议室里面 xff0c 同一个用户同时发布多个媒体流的 但在实际工作中有这种需要 xff0c 比如用户A既要发布摄像机媒体流 xff0c 同时也要发布屏幕共享媒体流 下面介绍一种简单的方法
  • Softmax回归模型

    用到的数学概念补充 凸集 xff0c 凸函数 xff0c 黑塞矩阵 简介 节中 xff0c 我们介绍Softmax回归模型 xff0c 该模型是logistic回归模型在多分类问题上的推广 xff0c 在多分类问题中 xff0c 类标签 可
  • Ubuntu记录用户IP访问操作信息工具

    1 用脚本时刻记录用户IP访问操作信息工具 xff0c 用shell脚本去记录 2 每隔一天存放用户信息 xff0c 记录操作时间 xff0c 固定地方存放 脚本如下 在服务器环境变量中加入如下代码 vi etc profile bin b
  • webrtc系列之-像老鼠一样打洞

    众所周知 xff0c 本光头刚涉猎音视频不久 xff0c 所以很多东西都是边学边做的 xff0c 有说得不对的地方 xff0c 请各位多包涵 说穿透之前 xff0c 我们首先需要明白关于WEBRTC的一些概念 xff0c WEBRTC它是一
  • PHP的三种简单实用的传参方式

    首先声明 xff0c 本干货的观点仅代表个人观点 xff0c 拿出来和大家唠叨唠叨 最近在写代码的时候 xff0c 发现了一个有趣的事情 就是我创建了一个新的函数 xff0c 但是因为各种需求 xff0c 各种功能设计的原因 xff0c 函