【问题标题】:PHP Coding Style Function vs Passing VariablesPHP 编码风格函数与传递变量
【发布时间】:2011-01-19 09:57:30
【问题描述】:

对整个 PHP 有点陌生。

只是想问一下,在性能和安全性方面哪个更好。我知道两者都有其优点和缺点,但似乎无法得出哪个对整体性能和安全性更好的结论。

  1. 使用包含大量函数的 PHP 文件。所以我拥有的每个页面都会“包含”函数 php 文件,因此可以在任何给定页面中调用函数。

  1. 有一个接受参数输入的 PHP 文件(不确定你是否这么称呼它)。例如 function.PHP?id=100

有没有cmets?

谢谢大家:)

【问题讨论】:

  • 您是否在问哪种方式是组织您的辅助功能的最佳方式?因为第二种方式看起来更像是你想要发出一个 HTTP 请求,它不会像你想象的那样工作。
  • 请改写或显示代码,尤其是对于您对 function.php?id=100 的含义以及它与包含文件的关系。
  • 组织、表演……没什么特别的。我以前使用第二种方法的原因是因为第二种方法有些简单,并且在其他语言中不存在,例如 VB 或 Java(它主要是基于函数或类的)。所以想知道第二种方法是否比第一种方法有任何主要优点。我之前使用第二种方法所做的是将值传递到页面中,然后页面处理这些值并将其结果保存在会话变量/cookie 中,甚至将其传递回/到新页面上进行显示。像函数一样工作,但当然不如函数灵活。
  • 例如:第二种方法 - cart.php?id=100 ====cart.php START==== $_REQUEST['id'];回声 $_REQUEST['id']-2; ====cart.php END====
  • 你真的在看你得到的答案吗?他们两个都很好:-)

标签: php function coding-style


【解决方案1】:

首选第二种方法:一个驱动整个应用程序/网站的index.php 文件。

至于分解应用程序, 您将使用 both: URL 中的参数来决定要做什么,以及接收参数并完成其工作的辅助函数。

挑战在于将“大问题”分解为更小的、可重用的“子问题”,并将每个问题包装在一个可重用函数中。

在那之后,解决“大问题”就是将函数调用粘在一起,就像你在益智游戏中所做的那样。

现在,这就是初学者水平的方法,在更高级的水平上,你可以将其分解为OOP manner,以利用autoloading(阅读我的回复那里有详细信息)。

介于这两种经验之间,您可以先尝试使用像http://www.limonade-php.net/ 这样的过程式 php 框架,然后再了解其代码并从中学习。这应该会让您走上正确的轨道,以便更高级地使用 PHP。

没有一个您提供的选项在安全性或性能方面有什么特别之处,它们都是相同的。将其分解为功能是代码可重用性可维护性的问题。话虽如此,OOP 在任何方面仍然更好(再次,我必须指出我的另一个答案)。

正如我所说,您将同时使用两者,并且您必须验证输入(即,$_REQUEST$_GET$_POST$_COOKIE$_SESSION$_FILE,(一些元素来自)$_SERVER)。小心XSS(基本上,您将使用strip_tags()htmlentities() 或两者的组合)。这是关于安全方面的。

【讨论】:

    【解决方案2】:

    欢迎 Tak4evr

    我会在这种方法上使用面向对象的设计实践。基于许多功能的程序代码很难遵循,因此维护成本很高。

    但考虑到选择,我会选择你的第一个选项:

    使用包含大量函数的 PHP 文件。所以我拥有的每个页面都会“包含”函数 php 文件,因此可以在任何给定页面中调用函数。

    您将包含此文件,而不是像您建议的那样使用function.php?id=100,您应该使用更具描述性的东西,然后使用您的函数。

    例如,使用clients.php?id=100,然后使用clients.php 获取id,并将id 传递给您的一个函数。

    希望对您有所帮助。

    【讨论】:

    • 我会根据系统中运行的对象和实体向该建议添加一个建议,即使用多个函数文件(帮助程序)。
    【解决方案3】:

    我花了一段时间才弄清楚这个问题可能意味着什么。

    有一个接受参数输入的 PHP 文件(不确定你是否这么称呼它)。例如 function.PHP?id=100

    我猜你的意思是你希望能够使用自己的用户定义函数只包含 PHP 代码的相关部分。

    除非你非常非常擅长编程,否则这种方法是解决问题的错误方法。有一个 google 用于自我修改代码,以讨论该主题。它打开了巨大的代码注入漏洞,使调试代码变得非常困难。

    即使没有安全问题,也没有维护问题,并且您是一位资深程序员,将参数传递到 PHP 脚本的唯一方法是通过 HTTP 请求或运行程序 - 两者相比都有巨大的开销直接从本地文件系统读取代码 - 所以从性能的角度来看,这种方法是错误的。

    PHP 确实具有看起来与您所提议的功能非常相似的功能 - 自动加载器。但是有一些非常重要的区别。

    您可以在 PHP 中控制的大部分与性能相关的东西(即不是 HTTP 的东西,不是 DB 的东西)是解释器必须解析的代码量。因此,从性能的角度来看,您的第一种方法存在缺陷。

    解决问题的正确方法是将功能分解为相关的块 - 并将它们保存在单独的文件中,然后只包含特定任务所需的那些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2015-12-17
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2012-04-19
      相关资源
      最近更新 更多