我目前有一个完全用程序 PHP 编写的相当大的应用程序。我希望进一步提升我的 PHP 经验,并使用面向对象的技术重新编写我的大部分应用程序。
在很多领域,OOP 可以帮助减少代码量并使其更易于阅读。但是,我有几个问题。
1)我的理解是,一个类被用作任意数量对象的蓝图,但是任何一个类只代表一个对象,从不超过一个。所以一个类可以代表一个玩家,但不能代表多个玩家。
2)由于我将包含很多不同的类,我是使用“加载器”类来加载它们,spl_autoload_register
还是只spl_autoload_register
在我的应用程序的程序文件中使用?
编辑:所以我的自动加载器将是一个类,然后我创建一个实例来启动自动加载,或者只是一个带有函数和 spl_autoload_register 的 php 文件,我将包括以避免在多个文件中重复相同的代码?
3)我的一些课程依赖于其他课程。我以前从未遇到过这种情况,所以老实说,我不知道答案。如果我在我的主程序文件中包含所有类,但我的播放器类不包含它需要运行的类,那么播放器类是否可以工作,因为主程序已经包含了播放器依赖的类?
编辑:所以即使一个类可以实例化一个 Player 类型的对象,并且 Player 类不直接包含在此类中,它仍然可以工作,因为控制器类确实包含 Player 类?
4)在多种情况下,我需要处理我正在创建的对象。我想知道我应该怎么做。例如,在我的 Player 类中,有时我需要从一个 Player 向另一个 Player 发送一些东西。那么,我是在 Player 类中实现一个以两个 Player 作为参数的静态方法并进行传输还是做其他事情?
编辑:好的,所以避免使用静态方法。现在我遇到了一个严重的问题:我的应用程序中有多次运行的方法,但我无法将它们实现为静态方法。我应该将它们实现为实例方法吗?例如,从一个播放器发送到另一个播放器。我会创建一个实例方法,它接受一个 Player 对象并向它发送或从它发送吗?
5)我有很多方法不属于任何一个类的实例,也不适合作为静态方法。这些是否应该在自己的类中声明为 Common 或类似的静态方法?在这种情况下在实践中做了什么?
编辑:这些方法是否属于使用它们的特定应用程序文件,或者可能存储在它们自己的“functions.php”文件中?
6)我想学习如何使用命名空间,但是我的代码永远不会被其他人使用,我也永远不会在我的应用程序中使用其他人的代码。命名空间是我的应用程序中不必要的添加,还是学习如何使用它们是个好主意?无论如何,一个应用程序有一个命名空间(应用程序名称?)还是每个类都属于它自己的命名空间?
7)最后,有一个用于数据库连接的类和一个用于网络方法的类是否很常见?我的应用程序需要两者。我认为将代码转换为使用面向对象技术时遇到的主要问题是确定将哪些方法放在哪里,因为目前它们都在一个整体文件中。
感谢您提供的任何帮助和见解。