重用大部分php代码的最佳方法

重用大部分php代码的最佳方法,php,Php,我正在为CMS定制模板,我不得不一次又一次地使用大部分代码来显示内容,代码本身保持不变。因此,我在思考如何更好地优化它: 让它成为一个函数——这将是完美的,但它使用了大约50个变量,我必须将它们全部重新声明为全局变量。也许有一种方法可以声明一个函数,使其具有父变量作用域 我不能使用循环,因为这段代码在没有模式的不同地方重复 到目前为止,对我来说最好的方法是创建一个单独的文件并使用include来放置它,但是创建单独的文件并不可取,因为最终用户更难理解和管理,也许可以在同一个文件中包含代码 编辑:

我正在为CMS定制模板,我不得不一次又一次地使用大部分代码来显示内容,代码本身保持不变。因此,我在思考如何更好地优化它:

  • 让它成为一个函数——这将是完美的,但它使用了大约50个变量,我必须将它们全部重新声明为全局变量。也许有一种方法可以声明一个函数,使其具有父变量作用域
  • 我不能使用循环,因为这段代码在没有模式的不同地方重复
  • 到目前为止,对我来说最好的方法是创建一个单独的文件并使用include来放置它,但是创建单独的文件并不可取,因为最终用户更难理解和管理,也许可以在同一个文件中包含代码
  • 编辑: 为了进一步澄清,模板是在页面上呈现html的工具。因此,我正在处理的代码只需要在相同的结构中多次呈现不同的内容,但内容不同(代码保持不变,但变量会改变其值)。因此,工作流程是:

    • 显示其他一些独特的内容
    • 显示相关代码生成的内容
    • 显示其他一些独特的内容,没有任何图案
    • 显示相关代码再次生成的内容
    • 并能够将其插入此页面上的任何其他位置

    除了上面提到的三种方法之外,还有其他方法可以重复使用代码吗(除了取消goto)

    如果一个函数有大约50个变量,那么您的函数/代码是错误的:)

    功能应该小、紧凑、灵活,并且(通常)不应该比屏幕大。我的平均功能大约是20-50行

    因为可以在函数中使用函数,所以可以重用大量代码

    因为您在CMS上工作,所以请定义经常发生的小部分。例如
    getPage
    getPageId
    getFileContent
    (如果您想要自己的函数)。这些函数只有一手所需的参数,因此不需要全局处理

    不确定代码是如何工作的,但在本例中,您可以同时使用
    getPage
    getPageId

    function getPage( $url ){
        $pageId = getPageId($url);
        // and now get a page:
        $content = getPageContent($pageId);
        return $content;
    }
    
    您现在可以使用这些函数,因为它们只执行小任务。如果做得好,小功能将为大功能的缩小创造空间。正如您在我的示例中所看到的,获取页面的函数实际上非常小

    到目前为止,对我来说最好的方法是创建一个单独的文件并使用include来放置它,但是创建单独的文件并不可取,因为最终用户更难理解和管理,也许可以在同一个文件中包含代码

    如果不提供任何其他细节,这是最好的方法。另外,当你说,“……但是创建单独的文件是不可取的,因为它更难为最终用户理解和管理。”你基本上是说,“这个客户想要一些复杂的东西,但不愿意为真正的CMS解决方案付费&不知何故,现在我要以某种方式简化一个固有的复杂过程。”

    这听起来像一个典型的客户,据说“没有预算”,他希望你做“伟大的工作”,然后向办公室里的一个“技术”人员展示如何做事


    我的建议?只需执行第三个场景&在这种情况下,不要担心最终用户。你完成了你的工作。

    可重用代码==函数。时期这就是他们的目的。如何最好地编写与所需变量相关的内容取决于所讨论的实际代码。您也可以选择第三个选项,但只要以这种方式包含单独的文件,就可以使用include_一次,如果您希望更改必须在单个文件中进行的模板,它们将反映整个站点可能我遗漏了什么,但包括一次,据我所知,将不允许再次包括相同的代码,虽然它肯定是当您包括一个函数时,它只是不允许我在同一页上再次使用呈现代码?如果我将对我包含的文件进行更改,它将在任何地方反映更改,是吗?我不记得要缓存的文件包含或类似的东西…我没有函数,我只需要在视图中重复部分代码,所以将其作为函数是一个合乎逻辑的建议,但它太大了,我无法减少它,我不能修改控制器,从那个里调用它,只是把结果传递到视图中。我怀疑你们不能实现代码某些部分的功能。我想不出一个合理的理由:p我已经做了很长一段时间了,你总是可以把大代码分解成小函数。即使这不会减少代码的实际行数,也会让其他人更好地阅读代码。嗯,我确实可以,但这值得麻烦吗?控制器向视图传递许多变量。如果我把代码的一部分变成一个函数,那么所有的变量都在全局范围内。当然,我可以将它们声明为全局变量,但与将代码拆分为文件并包含它相比,声明一组变量更麻烦,因此变量具有相同的作用域,不需要重新声明。我可以提供一个代码,但我认为它没有用,因为它可能是任何大视图的任何部分。是的,它主要是那种类型的客户机,所以这个问题不是很重要,但我想也许我会学到一些更好的方法来减少代码,我和其他任何人都可以使用。创建更多的文件通常会使其他人以后更难处理,因为他们需要了解每个文件都在做什么,而不仅仅是“哦,这里有一个视图”。