【问题标题】:Few Logical Programming Questions几个逻辑编程问题
【发布时间】:2011-04-16 08:17:47
【问题描述】:

我最近开始编码,这个社区帮助我理解了很多我不知道的事情。但是,许多著名的编码员向我介绍了一些模式,我必须编码的方式以及我不应该编写代码的方式。虽然感激地接受了他们的建议,但还是有很多不明白的地方。

我希望您的观点能够理解过去几天一直在我脑海中萦绕的几个问题。

MySQL

  1. 为什么每当我在 select 语句中使用 * 时,许多程序员都对我表示反对?为什么他们建议使用entityname.tablename,即使有时我想要一个表中的几乎所有数据?

  2. 如果我的代码在单个页面上频繁访问数据库,比如 5-8 请求,可以吗?为了在页面中更精确,我想更新值、插入值、计算行数、总结值等等。

    我曾经将几乎所有的 select 语句都作为单个查询进行,并且该社区的一位知名用户建议我不要这样做,而是建议我使用用户定义的函数。 (顺便说一句,用户定义的函数帮助我清理代码并更快地理解错误)。您对此有何看法?

框架

当我开始学习 PHP 时,我对编程知之甚少,但对 Web 的了解更多,尽管我在大学时学习了流行的计算机语言,如 C、C++、.NET、Java 等。这只是我学到的形式和理论主题,当我知道我想成为一名网络开发人员时,互联网是我最好的朋友,社区帮助了我。

现在,当我开始学习编程的旅程时,我已经为自己设定了一些目标和目标,我想成为一名专业 PHP 开发人员,我想掌握 HTML、JS、CSS、MySQL 等。我的问题是

框架对于像我这样的学习者来说是邪恶的吗?

【问题讨论】:

    标签: php mysql frameworks


    【解决方案1】:

    MySQL

    使用 * 很好。当您开始使用 MySQL 查询变得非常复杂时 - 加入和比较表 - 然后您想看看使用 entityname.tablename 只是为了避免让自己感到困惑。

    下一个问题太主观了。这取决于您的服务器和脚本的效率。这还取决于有多少人将使用该脚本。显然,与任何事情一样,您使用的越少越好。如果您可以执行 1 个 sql 查询而不是 5 个,则执行此操作,但如果您只有几百人查看您的博客,那么我不会太担心。它与功能相同。显然,将所有内容都放入函数中要好得多。从长远来看,这会有所帮助,因为您只需在一处编辑脚本即可进行更改。让我们这样说吧——如果你正在复制和粘贴代码,那么你应该使用函数。但是,如果您的脚本只有 1 个文件,200 行长,那么如果您不想这样做,我也不会担心。

    框架

    框架的用处很难衡量。显然,像 Zend 或 Mage 这样的学习是强大的框架,可以帮助您创建更高效​​和更复杂的 Web 项目。但是,对于学习者来说,它可能会让您感到困惑。我会说绝对不要尝试学习它们,直到你完全了解 PHP。希望那时您将有足够的了解,即使遇到这些问题也不会有问题。如果你学习了一个框架,你就会错过一门语言的要点。例如 - 如果您只学习 jquery,您将不会学习 javascript。你会学到一点,但你永远不会完全理解它。

    这是我的看法,但这是一个非常主观的问题。

    【讨论】:

    • 赞成。我将补充一点,对于第二个问题,您可能应该只做最容易编程和维护的事情,直到您发现自己有性能问题。此外,更少的查询并不总是更快 - 我曾经将一个复杂(嵌套)查询转换为两个简单查询,并看到了很大的改进。
    • @sorcycat - 在大多数情况下它会更快,但我知道有些人认为 mysql 在复杂算法上比 php 慢 - 基于数学或计算的查询会比只做两个慢左右查询(或者至少有人告诉我 - 我没有这方面的经验)
    • +2(相对于-1)表示轻松=D
    • 我还要在 re: #2 中提到,有些人是纯粹主义者,除了他们自己的神圣代码之外什么也得不到。我按照标准编写代码,而且我完全支持干净的代码,但有时不太纯粹的选择是最简单的选择。
    • 感谢托马斯提供的信息。我从这个话题中学到了很多东西。感谢您的时间和精力,我非常感谢:)
    【解决方案2】:

    虽然我同意 Thomas re: frameworks,但我必须不同意,或者至少扩展他对 MySQL 的看法。

    虽然在技术上没有任何问题,但在大多数情况下,对于在 SELECT 请求中使用 *,扩展列名可以使语句更易于理解,并且对于可能在您的代码中的其他开发人员来说更容易自我记录。他们可以查看查询并查看行对象应具有的属性。除此之外,* 在查询期间的效率也低。除非您只需要可用列的一小部分,否则这真的没什么好担心的。

    至于多个查询,这取决于。如果对特定项目运行 10 SELECT 比对多个项目运行 1 SELECT 并解析它们更快,则运行 10 SELECT。运行多个小而快的查询比运行一个大而慢的查询要好得多。显然,每个应用程序都会有所不同。

    【讨论】:

      【解决方案3】:

      在 SQL 中不喜欢 select all 的体面参数:http://www.joelango.com/2007/04/30/why-you-should-never-use-select-star/

      关于查询数量:这是一个性能问题。经验法则是在性能实际上成为问题时进行优化。如果您正在运行一个每分钟处理数千个请求的站点,您可能需要开始担心了。否则,它只是没有任何区别。

      关于框架:如果你想从基础学习 PHP,那么现在就避免使用框架。否则,如果您真的想参与并完成工作,那么从框架开始应该没问题。例如,我不了解 JavaScript 本身,但我可以很好地使用 JQuery(一个 JavaScript 库/框架)。

      【讨论】:

      • 这篇文章对我了解数据库的实际工作方式、何时以及为什么不应该使用星号非常有用。感谢您提供有用的信息。
      【解决方案4】:
      1. 在 SELECT 语句中使用 *:虽然它是完全有效的语法,但出于两个原因,通常建议不要这样做。一、速度;二:代码质量。使用 *,您正在请求(和获取)哪些行以及以何种顺序不明显;如果数据库是 ALTERED 并且添加了行,你也会得到这些,如果行的顺序发生了变化,结果将是非常出乎意料的。 如果您指定所需的行,则代码会更安全、更快速。

      话虽如此,您仍然可以使用 * 来方便和进行一些测试。 但对于生产代码,请考虑指定行。

      1. 使用 SQL 语句进行单独的 DB 调用会大大减慢处理速度,因为必须发送、接收、编译和解释这些语句中的每一个,并将结果发回 - 只是为了在另一个调用中再次接收它们。 存储过程(或“用户定义的函数”)更有效,并且对注入等攻击也更安全。如果您可以在不牺牲灵活性或您需要的其他方面的情况下制作它们,请这样做。 但是,当您还在寻找自己的方式时,不要这样做 - 过早的优化是万恶之源,He 说。

      2. 框架非常有用,但对于学习者/初学者来说确实不是一个好主意。它们会导致您跳过应该学习的重要部分并限制您的思考。判断框架的优缺点,选择框架,克服缺陷,首先要具备扎实的基础知识。

      所以学习你的基础知识,一旦你牢牢掌握它们,你就可以开始使用框架了。

      【讨论】:

        【解决方案5】:

        就像 Thomas Clayson 说使用 * 对简单的查询很好,但是当您有复杂的连接语句时,您应该指定字段并给表命名(如 someTable as a)并使用 a.someField 来组织您的查询。

        在学习特定语言时,框架只是帮助开发人员在更短的时间内完成工作的工具(包括维护,最糟糕的事情 jaja),但如果你是初学者,你真正应该学习的是语言支持什么编程范式(面向对象,过程或功能)并关注或学习这些范式和语言的特定命令,因为例如,如果您更喜欢面向对象的类将始终是类,函数和过程将始终具有相同的squelet,但每种语言的实现都不同,所以如果你学习了范式,那么学习任何语言都会很容易。

        我的拙见希望会有所帮助,问候

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-05
          • 1970-01-01
          • 1970-01-01
          • 2018-01-17
          • 1970-01-01
          相关资源
          最近更新 更多