用于PHP中的流控制的切换与类

时间:2012-09-01 16:30:30

标签: php oop procedural-programming flow-control

最近,我写了一个简单的Web应用程序。 我现在有。

  • 提供html标记和我需要的资源的静态页面
  • 一种javascript路由处理机制,它与服务器通信并在客户端上呈现响应。

对于我需要操作的每个对象,服务器在/app/object.php提供一个php脚本,它接受POST数据并返回JSON结果。

例如(不是实际回复):

POST /app/comments.php?a=add&page_id=43&author=A&text=Some%20Text
{"s":"OK"}

POST /app/comments.php?a=list&page_id=43
[{ "author": 'A', "text": "Some text"}, { "author": "B", "text": "Other text"}]

POST /app/users.php?a=list
["A", "B", "C"]

在幕后,JSON api实现如下:

//comments.php
require('init.php'); 
// start sessions, open database connections with data in config.php

switch(POST('a')){
case "list":
    //.... retrieving data
    echo json_encode($data)
break;
case "add":
    //.... inserting data
    echo '{"s":"OK"}';
break;
}

最大的对象有7个方法和200个(缩进的,未压缩的)LOC,而平均每个对象大约有3个方法。

我的开发人员朋友建议用对象替换开关,使其“更简单”,“更具可扩展性”和“更易于维护”。

我坦率地看不出这样的系统如何变得更简单(特别是使用对象),但我很想知道其他开发人员的意见。

忽略在PHP中使用对象的性能损失,我应该使用基于类的方法吗?

如果是,如何构建我的JSON API以便使用对象,而无需添加太多代码(从而降低项目的可维护性)?

1 个答案:

答案 0 :(得分:3)

<?php

class Controller {
  protected $post;
  public function __construct() {
     $this->post = $post;
  }
  public function __call($name, $arguments) {
    if(!method_exists($this, $name)) {
      die("Unknown action!");
    }
  }
  public function whatever() {
    echo json_encode($this->post['page_id']);
  }
  public function data() {
    echo '{"s":"OK"}';
  }
  // new action? just add another method
}


$controller = new Controller();
$controller->{$_POST('a')}(); // example 1

$controller->data(); // you can't do it using switch
  1. 轻松添加新方法
  2. 易于维护
  3. 您可以随时触发方法
  4. 代码整洁
  5. 这是非常常见的做法