繁体   English   中英

如何在不使用框架的情况下编写好的PHP代码?

[英]How do you write good PHP code without the use of a framework?

除了标准的OO概念之外,还有哪些其他策略可以在不使用框架时生成良好,干净的PHP代码?

请记住:MVC,OOP和层是设计概念,不是语言结构,也不是文件结构。

对我来说,这意味着当不使用框架时,以及没有不同的团队进行编程和设计时; 在PHP(这是一种模板语言)之上使用另一个模板系统没有任何价值。 此外,将代码与布局分离并不一定意味着在不同的文件上进行。

这就是我以前用于一次性,很少扩展的PHP Web应用程序的方法:

  1. 写一个'通用实用程序'文件,我在那里放了一些格式化/清理功能,以及一些数据库访问功能:
    1. getquery():给定一个SQL,返回一个结果对象
      • getrecord():给定一个SQL,返回一个记录对象(并关闭查询)
      • getdatum():给定一个SQL,返回一个字段(并关闭查询)
      • 将所有配置(数据库访问,一些URL前缀等)放在'config.php'文件中
      • 为您存储在DB上的每个对象写一个模型层,一个文件或一个文件。 在那里,将是所有SQL常量,基于概念对象呈现更高级别的API,而不是基于DB记录。

那是你的'框架',然后你写''presentation'层:

  1. 每个页面有一个PHP文件,从一些简单的代码开始,用于获取所需的对象,然后是带有插入的PHP代码的HTML,只是为了“填充漏洞”。 除了极少数例外,最复杂的代码应该是循环。 我规定只使用单行, ?>应该与开头<?php在同一行

    • 每个数据输入表单应指向一个没有任何HTML的小PHP,只需获取POST数据,进入数据库,然后转发到调用页面。

就是这样。 如果单独工作,它会将您需要的所有意图分开,而不会淹没在用于单个用户操作的大量文件中。 用户看到的每个页面都由一个PHP文件管理。

在几个月没有查看代码之后,它甚至很容易维护,因为它很容易测试应用程序,记录浏览器URL字段中的文件名。 这将直接指导您使用相关代码。

(现在,当然,我几乎把所有东西都用在Django上......)

我会说与其他任何语言几乎相同:

  • 不要过早优化
  • 保持方法小
  • 练习DRY
  • 练习数据驱动的编程
  • 使用明智的捷径(例如三元运算符)
  • 格式化您的代码,以便其他人可以理解
  • 不要盲目使用OO
  • 始终检查返回代码是否有错误
  • 启用最高警告级别并确保您的代码不会产生任何警告
  • 在键入问题时要非常小心(这适用于所有弱类型语言)。 '==='运算符是你的朋友。

如果你发现自己混合HTML和代码,只需停止。 你是,好吧...... 你做错了! http://dennisjudd.com/albums/cute_cats/wrong_mike.jpg

实际上这个问题与语言无关,因为它适用于您选择“自己动手”的大多数语言。 我要提出的两个建议是:

首先,仅仅因为你没有使用框架并不意味着你不能采用分离代码的模式。 MVC模式是您在安排源代码时应该考虑的最小值 - 它使得源代码集合更加清晰和易于维护,即使应用程序不完全遵循与框架相关的路由进程,代码“ “事物与”代表“事物是非常有益的。

其次,仅仅因为你选择不使用完整的框架,并不意味着你需要重新发明轮子。 合理利用预先打包的库以解决特定问题。 两个很好的例子是日志框架(log4php)和前端渲染/模板解决方案(Smarty)。

尽可能远离全局:-D

如果您确实遵循OO概念,例如关注点分离,您的代码将会非常好,但这里有一些建议:

  • 框架与否,使用MVC。
  • 我不能强调永远不要将你的逻辑与HTML混合是多么重要。 在HTML文件中,PHP应仅用作模板语言,仅此而已。
  • 使用DBAL。
  • 将您的设计与您的内容分开。 执行此操作的常用方法是大量使用CSS并具有包含大量站点布局的页眉和页脚文件。
  • 有一个用于选项常量的文件,如DB凭据,FTP凭据等。

确保遵循关注点分离的标准做法。 这意味着尽量不要将业务和数据层与您的UI混合在一起。

即使您不使用框架,也请使用模板引擎。 通过使用模板,您将分离应用程序的逻辑和表示。 然后设计,编码和格式化逻辑部分,就像使用任何其他语言一样。 让“设计师”设计用户界面:)

OO并不是绝对必要的:也可以在PHP <5中编写好的代码。 良好的程序代码,通过“逻辑距离”很好地分隔成文件和目录也应该保证您的安全。 但请注意,这是如何从远处开始类似于OO的。

最好的事情是保持一致:我已经看到一个项目,Smarty在大多数页面中使用,除了一个 - 最复杂的,去图 - 。

利用PHP的内置扩展 - 例如MySQLi。 随着这些变得更加面向对象,对框架的需求变得越来越少。

例如,我可以使用以下扩展创建一个有用的TwitterApp,除了核心类之外没有实际框架将实例绑定在一起。

  • 用于数据库的MySQLi(如果需要DAL,则为PDO)
  • SimpleXML用于RSS / API读取
  • Smarty用于模板化

我可能需要为Login之类的东西制作一些帮助类,但是我通常的一对类(DAL和TPL)已被两个非常好用的扩展所淘汰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM