在PHP项目中组织/扩展类
我正在做一个PHP项目,其中有几个简单的类。我正在努力使我的类变得更复杂,但我还想开始使用类来处理其他事情,如管理用户、配置设置、显示等。我很难弄清楚如何“组织”它们。比如我应该如何扩展这些类 我有以下课程:在PHP项目中组织/扩展类,php,oop,class,extend,Php,Oop,Class,Extend,我正在做一个PHP项目,其中有几个简单的类。我正在努力使我的类变得更复杂,但我还想开始使用类来处理其他事情,如管理用户、配置设置、显示等。我很难弄清楚如何“组织”它们。比如我应该如何扩展这些类 我有以下课程: //main application settings, constants, etc. Class Config { } //add/edit/delete/check permissions of users Class Users extends Config { } //dis
//main application settings, constants, etc.
Class Config {
}
//add/edit/delete/check permissions of users
Class Users extends Config {
}
//displays the pages
Class Display extends Config {
}
//main application
Class Analysis extends Config {
}
//specific methods for this type of analysis
Class Standard extends Analysis {
}
//specific methods for this type of analysis
Class Consolidated extends Analysis {
}
我遇到的问题是,我希望能够从所有其他类(显示、分析、标准和合并)访问用户和配置类。我该怎么做?我是否适当地扩展了课程?我觉得显示和分析应该扩展用户,但对我来说似乎并不合适。我感谢你能提供的任何帮助。谢谢 在我的项目中,我的用户和配置类都很复杂,这使得我可以通过一个简单的方法调用轻松地将实例拉入任何其他类中
Class User{
private static $_instance;
private function __construct(){
}
public function getInstance(){
if( !self::$_instance ){
self::$_instance = new User();
}
return self::$_instance;
}
}
然后在我需要访问该用户对象的任何地方
$user = User::getInstance();
将它们保存在单独的文件中,然后使用自动加载。避免OOP疯狂的倾向。请记住,类可以作为属性引用,而不仅仅是在扩展方法中引用。您可以尝试
trait Config {
}
// Common to Display
abstract class Display {
function __construct(Users $user);
}
// Common to analysis
abstract class Analysis {
function __construct(Users $user);
}
// add/edit/delete/check permissions of users
class Users {
use Config ;
}
// Mobile Display
class Mobile extends Display {
}
// Web Display
class Web extends Display {
}
// specific methods for this type of analysis
class Standard extends Analysis {
}
// specific methods for this type of analysis
class Consolidated extends Analysis {
}
// main application
class Main {
use Config ;
public function setDisplay(Display $display);
public function setAnalysis(Analysis $analysis);
}
$user = new Users("Jeff");
$main = new Main();
$main->setDisplay(new Mobile($user));
$main->setAnalysis(new Standard($user));
一般来说,您可以使用“”原则来组织类的层次结构。根据您的描述,它看起来像:
和Standard
是(在is-a意义上)Consolidated
,因此它看起来是层次结构的一个很好的候选者Analysis
和User
需要访问Display
值,但它们似乎没有概念上的关联,也没有共同的行为,因此这里的组合似乎比继承更合适Config
Config
类有一个saveValuesToDB()
,它看起来肯定是用户不应该关心的东西(即配置值如何存储在数据库中)。通过搜索继承与组合,您可以找到关于该主题的大量信息,并且是模式社区中经常出现的主题。您可以找到一些关于OO设计和模式的好书
HTH您使用的是什么版本的PHP5.4
或<5.4
对于最后一部分,您将如何从您的一个类中引用它?从任何地方使用相同的方式,包括其他类,因为您正在使用静态方法实例化对象,并且它是一个单例,您将始终获得相同的对象,而不是实例化新对象。谢谢您的示例!我现在如何访问分析和显示类中的方法?我会使用$main->method吗?可以是这样的