将过程PHP转换为面向对象的PHP
我目前有一个相当大的应用程序完全用程序
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)最后,有一个类用于数据库连接,还有一个用于网络方法的类是常见的吗?我的应用需要两者.我认为转换我的代码以使用面向对象技术时遇到的主要问题是确定将哪些方法放在哪里,因为目前它们都在一个整体文件中. 感谢您提供的任何帮助和见解.
通常,您还将拥有表示对象集合的类,例如一个“玩家”类,可用于从所有玩家的集合中检索单个玩家: $players = new Players(); $john = $players->findByName("john");
这很大程度上取决于项目的复杂性.一个简单的自动加载器功能通常是足够好的,但你可以看看Zend Framework Autoloader class.
是.但是,通过自动加载,您根本不需要担心这一点.如果不使用自动加载,最好在定义类的文件中包含必需的类(使用require_once()以避免多次包含同一文件).
静态方法几乎总是错误的方法.普通方法属于一个实例(即特定玩家),静态方法属于该类,即玩家的一般“想法”.如果你需要将东西从一个玩家转移到另一个玩家,为什么不这样实现: class Player { public function transferMoney(Player $recipient,$amount) { ... } } $tom = new Player("tom"); $marc = new Player("marc"); $tom->transferMoney($marc,500);
我无法合理地回答这个问题.但是,PHP中仍然存在普通函数,这些函数似乎是这种情况的最佳方法.然而,如果你正确地做OOP,你很可能永远不会遇到这样的问题.这通常是您的类设计的一个问题,这使您认为这些方法不属于任何对象.
命名空间很棒但是如果没有它们,你的代码可能会很好.由于命名空间可以嵌套,因此每个组件通常都有一个顶级命名空间和子命名空间.
这取决于您如何建模您的实际情况.如果数据库连接和“网络”是两个不同的东西,那么两个类就是可行的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |