Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php面向对象编程_Php_Oop_Ooad - Fatal编程技术网

php面向对象编程

php面向对象编程,php,oop,ooad,Php,Oop,Ooad,我有一些关于OOP的问题。我不是一个高级用户,我正面临着一个问题,有些人以前可能有过这样的经验 基本上,我使用MVC来处理我的php项目。我试着使班级尽可能独立。但我认为这相当困难。e、 g: 我有一辆高级轿车和一个高级用户。用户将汽车信息发布到网站,可能是为了销售 在类User中,我有getUser来获取用户信息 所以在汽车课上,我可能有setCar,getCar,saveCar。要显示这些汽车,我可能需要一个displayCars()。在displayCars()中,我可以使用getCar获

我有一些关于OOP的问题。我不是一个高级用户,我正面临着一个问题,有些人以前可能有过这样的经验

基本上,我使用MVC来处理我的php项目。我试着使班级尽可能独立。但我认为这相当困难。e、 g:

我有一辆高级轿车和一个高级用户。用户将汽车信息发布到网站,可能是为了销售

在类User中,我有getUser来获取用户信息

所以在汽车课上,我可能有setCar,getCar,saveCar。要显示这些汽车,我可能需要一个displayCars()。在displayCars()中,我可以使用getCar获取汽车列表。但我可能还需要使用User::getUser来获取提交这些汽车的用户的用户信息。所以在某种程度上,displayCars依赖于User::getUser


那么我该怎么办呢?

你需要的不仅仅是汽车和用户来模拟这个问题。从概念上讲,我至少有以下几点:

  • 每个单独的汽车都应该由一个汽车对象表示
  • 用户输入填充汽车对象属性的信息
  • 汽车对象和提交该汽车的用户都成为CarDBItem对象的属性
  • 然后将所有的CarDBItems放入一个CarDB对象中,该对象管理任何用户输入的所有汽车

当然,这是非常简化的——当您实际编写应用程序时,会有比这更多的内容。但我认为,从这些角度来看问题是一个很好的起点。

你需要的不仅仅是汽车和用户来模拟这个问题。从概念上讲,我至少有以下几点:

  • 每个单独的汽车都应该由一个汽车对象表示
  • 用户输入填充汽车对象属性的信息
  • 汽车对象和提交该汽车的用户都成为CarDBItem对象的属性
  • 然后将所有的CarDBItems放入一个CarDB对象中,该对象管理任何用户输入的所有汽车

当然,这是非常简化的——当您实际编写应用程序时,会有比这更多的内容。但我认为,从这些角度来看待问题是一个很好的起点。

您的困惑部分来自这样一个事实,即OO和MVC是完全不同的设计概念,事实上可能相互矛盾。我在工作中也面临同样的争论

例如,OO说只有类本身应该知道类是如何工作的,而其他所有类都应该只与它的接口通信。MVC说您应该拥有几乎没有任何功能的哑数据(模型)对象,并使用单独的类来保存业务逻辑

OO表示,如果您需要两个类以类似的方式工作,请让它们从基类继承公共功能,而MVC通常更喜欢在调用具有实际功能的其他类的类之前放置一个外观

您可以将两者结合,但不能在相同的位置或层中。您可以使用组合来构建作为其他模型超集的模型(数据对象),也可以使用继承来创建类似的控制器,但必须小心


基于Web的应用程序非常适合MVC,正如其他人所指出的,有一些已建立的框架可以用来指导您。

您的困惑部分来自这样一个事实,即OO和MVC是完全不同的设计概念,事实上可能相互矛盾。我在工作中也面临同样的争论

例如,OO说只有类本身应该知道类是如何工作的,而其他所有类都应该只与它的接口通信。MVC说您应该拥有几乎没有任何功能的哑数据(模型)对象,并使用单独的类来保存业务逻辑

OO表示,如果您需要两个类以类似的方式工作,请让它们从基类继承公共功能,而MVC通常更喜欢在调用具有实际功能的其他类的类之前放置一个外观

您可以将两者结合,但不能在相同的位置或层中。您可以使用组合来构建作为其他模型超集的模型(数据对象),也可以使用继承来创建类似的控制器,但必须小心


基于Web的应用程序非常适合MVC,正如其他人所指出的,有一些已建立的框架可用于指导您。

也许您已经让getCars返回发布汽车的用户id。然后可以使用该用户id并将其传递给getUser方法。它应该在一个专门展示汽车的单独类别中。这个独立的显示器可以显示实现ICar的任何类。这样,显示器就可以用于不同的ICar实现。将显示代码与业务逻辑(功能)分开。Google“编程到接口而不是实现”Hi StackOverflowNewbie,是的getCars有用户ID,我用它传递给User::getUser()以获取用户信息。但是这里的问题是Car::displayCars()依赖于User::getUser()。我想减少耦合。=)嗨,Spidy,我会考虑你的想法。我认为将显示功能分离将减少耦合。然而,这让我想到了另一个相关的问题。例如:我有一个类CarComments,它处理用户提交的这些汽车的评论。如果我调用deleteCar(),它也应该调用CarComment::deleteComments()。所以也有一些依赖性。hmmm=)也许您已经让getCars也返回发布汽车的人的用户id。然后可以使用该用户id并将其传递给getUser方法。它应该在一个专门展示汽车的单独类别中。这个独立的显示器可以显示实现ICar的任何类。这样,显示器就可以用于不同的ICar实现。分离显示器c