繁体   English   中英

从Procedural到OO PHP。 实例

[英]From Procedural to OO PHP. Live Example

我希望你能帮助我! =)

由于我使用PHP,我总是编写程序。 为什么? 答案很简单。 我不知道如何使用对象等。但我想! 真的... =)我在网上搜索并找到了本教程 - 使用PHP进行面向对象编程 所以我读了它,学习了语法。 给定代码进行一点点实验。 我认为这是学到的! 的xD

让我解释一下这个问题。 例如,我想创建用户系统。 之前很容易做到。 我只是创建一个HTML格式的文件。 用户输入用户名和密码。 它发送到我验证它的另一个文件。 如果一切正常,那么PHP会将新条目写入数据库。 否则会创建错误。 与登录相同,仅用于使用用户ID创建的入口 - 会话变量。 以及如何检查用户是否已登录? 只需检查会话变量。 没问题。 而问题来了......对象? 我该怎么做? 什么是对象(用户,一些验证?)? 对象在哪里? 等等愚蠢的,甚至是新手的问题... =(

每个人都能为我创造一些榜样吗? 真的是新手了。 我真的很想学。 谢谢。 =)

PS对不起我的英语,这不是我的母语。 = P

这是一个极端广泛的问题。 您要求我们为您提供整个应用程序核心的骨架实现! :-)

其中大部分还取决于您对应用程序架构的理解。 您必须创建所有这些类或使用它们的开源实现,它们不是内置于PHP中。 这就是为什么大多数人使用提供大部分基础内容的框架。

但是我不建议直接使用jsumping来使用具有基础知识水平的框架。 ID敦促您阅读OOP模式和概念。 这篇文章虽然陈旧,但它直接比较了从过程到OOP的过程,并引导您创建自己的基本MVC框架。 Ther有很多类似的资源,所以如果我是你,我会google。

我不知道我会在生产中使用这样的框架,但创建它并使用它制作个人应用程序的过程对于学习是非常宝贵的。 在你得到一些关键概念和模式之后,我会选择一个框架,它有很多结构(在你的情况下越硬越好,因为你只是在学习)并开始使用它。

虽然我不亲自使用它,因为它不够灵活,我想我会推荐CakePHP在你的情况下。 Symfony可能也是一个不错的选择,但它非常复杂,如果你是OOP的新手,你可能会失去理智...同样对于Zend :-)

我还推荐PHP对象,模式和练习,第二版作为一般参考书。 它类似于PoEAA,但特定于php实现和示例。

作为第一步,您可以采用过程脚本并确保所有大型代码块都在函数中。 然后,将所有相似或相互属于的函数放在不同的文件中。 例如,将所有与用户相关的函数分组到user.php中,将特定于数据库的函数分组到database.php等。如果您已经编写了一段时间的程序样式,那么您可能已经有了这个。

现在第一步是将这些文件转换为类:

使新的user.php包含一个空类'user'。 现在,将所有用户函数复制到此类中(因此它们成为方法)。

例:

之前


function authenticate()
{
  // auth
}
function createUser()
{
  // create new user
}


class person
{
  public function __construct()
  {
    // create new user
  }
  public function authenticate()
  {
    // auth
  }
}

如果对所有函数组执行此操作,最终会得到一个非常基本的面向对象程序。

示例:而不是调用$user = createUser('john doe'); 你只需要$user = new user('john doe');

我建议你这样练习,只需要一个简单的脚本即可。 学习OO从开始学习。

当你完成你的第一个类似OO的程序时,寻找要改进的东西。 一堂课变得太大了吗? 将其拆分为多个子类。 多个班级几乎一样吗? 也许让他们都继承一个基类。

简而言之:刚开始这样做。 它并非完全不同。 想象一个班级作为一大堆功能。

每当你走进一个你觉得代码出现问题的情况时,找一下OO最佳实践或示例的指南(不是特别针对PHP),有很多。

PS作为一些答案指出,我不认为你不应该期望有人写你的应用程序的一半。 只是尝试开始并发布一个问题,如果它不起作用。

使用OOP开始并没有真正改变你描述的流程,尽管通常在页面上的大部分逻辑现在都在对象内部。

因此,您的用户类可以存在构造函数,如果给出了id,则可以从数据库中获取用户,编辑和保存选项。 只需开始创建用户类并考虑您想要在类中调用的有用方法。

您可能还想开始阅读有关设计模式的内容,这可能会帮助您创建课程。 您可能想要创建的第一个类是一个可以为您提供数据库连接的类,这可以通过单例模式轻松完成。 开始阅读那个非常基本的东西,非常有用。

暂无
暂无

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

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