我目前有一个相当大的应用程序完全用程序 PHP编写.我希望进一步提高我的 PHP体验,并使用面向对象技术重新编写我的大部分应用程序.

OOP有很多方面可以帮助减少代码量并使其更易于阅读.但是,我有几个问题.

1)据我所知,一个类被用作任意数量对象的蓝图,但任何一个类只代表一个对象,从不多于一个.因此,一个班级可以代表一个玩家,但从不代表多个玩家.

2)由于我要包含很多不同的类,我是否使用“Loader”类使用spl_autoload_register加载它们,或者我只是在我的应用程序的程序文件中使用spl_autoload_register?

编辑:所以我的自动加载器将是一个类,然后我创建一个启动自动加载的实例或只是一个带有该函数和我将包含的spl_autoload_register的PHP文件,以避免在多个文件中重复相同的代码?

3)我的一些课程依赖于其他课程.我以前从未遇到过这个,所以老实说我不知道​​答案.如果我在我的主程序文件中包含所有类,但我的播放器类不包含它需要运行的类,那么播放器类是否可以工作,因为主程序包含了播放器所依赖的类?

编辑:所以即使一个类可以实例化一个Player类型的对象,并且该类没有直接包含Player类,它仍然可以工作,因为控制器类确实包含了Player类?

4)在多种情况下,我需要处理我正在创建的对象.我想知道我应该怎么做.例如,在我的Player类中,我有时需要从一个Player向另一个Player发送一些东西.那么,我是否在Player类中实现一个静态方法,该方法将两个Players作为参数并进行传输或者我还要做其他事情吗?

编辑:好的,所以避免使用静态方法.现在我遇到了一个严重的问题:我的应用程序中有多次运行的方法,但我不能将它们作为静态方法实现.我应该将它们作为实例方法实现吗?例如,从一个播放器发送到另一个播放器.我是否会创建一个实例方法来获取Player对象并将其发送给它或从中发送?

5)我有很多方法并不真正属于任何一个类的实例,它们也不适合作为静态方法.这些是否应该作为Common或类似的静态方法在他们自己的类中声明?在这种情况下,在实践中做了什么?

编辑:这些方法是否属于使用它们的特定应用程序文件,或者可能存储在自己的“functions.PHP”文件中?

6)我想学习如何使用命名空间,但我的代码永远不会被其他人使用,我永远不会在我的应用程序中使用任何其他人的代码.名称空间是我的应用程序中不必要的补充,还是学习如何使用它们是一个好主意?无论如何,一个应用程序是否有一个命名空间(应用程序名称?)或每个类是否属于它自己的命名空间?

7)最后,有一个类用于数据库连接,还有一个用于网络方法的类是常见的吗?我的应用需要两者.我认为转换我的代码以使用面向对象技术时遇到的主要问题是确定将哪些方法放在哪里,因为目前它们都在一个整体文件中.

感谢您提供的任何帮助和见解.

1) It is my understanding that one class is used as a blueprint for any number of objects,but any one class represents only one object,never more than one. So one class Could represent a player,but never multiple players.

通常,您还将拥有表示对象集合的类,例如一个“玩家”类,可用于从所有玩家的集合中检索单个玩家:

$players = new Players();
$john = $players->findByName("john");

2) Since I will have quite a few different classes to include,do I use a “Loader” class to load them all using spl_autoload_register or do I just use spl_autoload_register in the program files for my application?

这很大程度上取决于项目的复杂性.一个简单的自动加载器功能通常是足够好的,但你可以看看Zend Framework Autoloader class.

3) Some of my classes depend on other classes. I’ve never encountered this before,so I honestly do not kNow the answer. If I include all the classes in my main program file,but my player class does not include the class which it needs to function,will the player class work since the main program has included the class which player depends on?

是.但是,通过自动加载,您根本不需要担心这一点.如果不使用自动加载,最好在定义类的文件中包含必需的类(使用require_once()以避免多次包含同一文件).

4) There are multiple cases where I will need to work on the objects I am creating. I am wondering how I should do that. For example,in my Player class I will sometimes need to send something from one Player to the other Player. So,do I implement a static method in the Player class that takes two Players as parameters and does the transfer or do I do something else?

静态方法几乎总是错误的方法.普通方法属于一个实例(即特定玩家),静态方法属于该类,即玩家的一般“想法”.如果你需要将东西从一个玩家转移到另一个玩家,为什么不这样实现:

class Player {
    public function transferMoney(Player $recipient,$amount) { ... }
}

$tom = new Player("tom");
$marc = new Player("marc");

$tom->transferMoney($marc,500);

5) I have a lot of methods that don’t really belong to any one instance of a class nor are they really appropriate as static methods. Should these be declared in their own class as static methods as Common or similar? What is the done in practice in this situation?

我无法合理地回答这个问题.但是,PHP中仍然存在普通函数,这些函数似乎是这种情况的最佳方法.然而,如果你正确地做OOP,你很可能永远不会遇到这样的问题.这通常是您的类设计的一个问题,这使您认为这些方法不属于任何对象.

6) I’d like to learn how to use namespaces,but my code will never be used by others and I will never use anyone else’s code in my application. Are namespaces an unncessary addition in my application or would it be a good idea to learn how to use them? Regardless,does one application have one namespace (the application name?) or does each class belong to it’s own namespace?

命名空间很棒但是如果没有它们,你的代码可能会很好.由于命名空间可以嵌套,因此每个组件通常都有一个顶级命名空间和子命名空间.

7) Lastly,is it common to have one class for database connections and also a class for network methods? My application needs both. I think the main problem I am having with converting my code to use object-oriented techniques is determining which methods to put where,as currently they are all in one monolithic file.

这取决于您如何建模您的实际情况.如果数据库连接和“网络”是两个不同的东西,那么两个类就是可行的方法.

将过程PHP转换为面向对象的PHP的更多相关文章

  1. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  2. Swift面向对象概念和基本特征

    面向对象是现代流行的程序设计方法,是主流的程序设计规范面向对象的基本特征包括:封装性,继承性和多态性:封装性:尽可能的隐藏对象的内部细节,对外形成一个边界,仅保留有限的对外接口使之与外部发生联系。

  3. Swift学习笔记-面向对象

  4. Swift学习笔记-面向对象3

  5. Swift面向对象之枚举

  6. swift学习2 元组 tuples

    swift中出现了一种新的数据结构,非常牛掰的元组tuples如果懂PHP的猿,会发现这个元组和PHP的数组非常类似,同样是可以默认不指定key,也可以指定key目前的学习疑问是,如何进行元组的遍历?

  7. 尝试使用swift mailer,gmail smtp,php发送邮件

    这里是我的代码:在运行时出现此错误…

  8. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  9. jQuery的Cookie封装,与PHP交互的简单实现

    下面小编就为大家带来一篇jQuery的Cookie封装,与PHP交互的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部