从javascript OOP背景了解php类结构(如何调整代码工作流)

时间:2013-09-28 20:10:43

标签: php class oop design-patterns

我一直试图在php中编写一个简单的RESTful api。我这样做的部分目标是掌握如何处理php OOP项目。在javascript中,我没有封装,继承等问题。我通常从一个对象(甚至可能只是作为命名空间)开始,我将所有内容嵌入,即var appName = {}。一个更简单的对象可能只是一组方法...然后是一些典型的需求,比如init函数来设置和/或execute/run函数,我可以在其中详细说明流程。我喜欢在那里使用一些通用函数来总结将要发生的所有事情,然后对它们进行详细说明,然后详细说明等等,这样就可以很容易地看到结果是如何产生的,并且您可以根据需要进一步调查细节。我也保持一切独立,这样每个函数都不必担心它如何获得它的依赖等等。所以,我希望能让你知道我来自哪里......我完全迷失在这个世界里oop php。

我继续在js写了一个简单的api,只是为了展示我正在尝试做的事情。它可能会更好,但这只是一个简单的例子。 http://jsbin.com/AmIfApO/3/edit 我已经尝试了数周才能在php中实现此功能,并且失败,失败,失败。我可以使它工作,但它只是糟糕的代码,我决心用最佳实践编写它。为了不出现懒惰,这里是我尝试过的最新的php重写......总是像http://pastebin.com/cKw9YeVz一样在灾难中结束。

对于js,我最终看到了正确的例子/得到了正确的建议,这个想法变得非常明确。我认为甚至只看到如何在php中完成这一步的基本设计流程可能会帮助我把我所学到的一切都联系起来。有些东西没有点击。如果你能给我一个例子,说明我应该在这里开设什么课程或如何分开,我会非常感激。

编辑:进一步澄清我最挣扎的是应用程序的“骨头”。有很多方法可以完成同样的事情。我理解如何在类和继承中打包,我只是不知道应该如何使用这些东西。这是我正在寻找的一个例子。这看起来怎么样?

$diC = new diC(); //dependency injection container

$router = $diC->get('router');
$api = $diC->get('api'); //this class probably makes no sense

if (!$router->collection) { //api/collection - no data requested
  $data = $api->defaultResponse(); //what ought to take care of this?
}
else {
  $route = $diC->get("collection_{$router->collection}"); //instantiate the class that will handle the collection request
  $method = ($router->item) ? "{$router->verb}_item" : $router->verb; //$route->GET or $route->GET_item (for api/collection/item)
  $data = $route->$method(); //get data for the request
}

$output = $api->format($data, $router->type); //again...what should be in charge of formatting the data?

echo $output;

除了对上面的代码应该如何看起来没有任何线索之外,我还想要一个几乎应用程序的任何部分都可以添加的错误数组($errors = [])。我不确定是否有一种简洁的方法可以使其可用并返回数据。一切都依赖的错误类似乎很糟糕。

1 个答案:

答案 0 :(得分:2)

您不应该理解“PHP OOP”,因为这与任何其他OOP语言相同,只是具有不同的语法,优点和缺点。您应该研究OOP原则以及如何有效地利用OOP。

我建议购买一些OOP书籍,甚至尝试学习Java等强类型语言。这将使您熟悉使用其他语言(如PHP)学习的技术/实践。

我认为问题是你觉得自己做错了(通过查看你的例子)。您应该看一下将为您处理数据库和请求的PHP框架。

这些只是概述基本结构的通用示例,请使用Laravel框架查看本教程。

http://net.tutsplus.com/tutorials/php/laravel-4-a-start-at-a-restful-api/