我应该把什么课分和什么东西放在课堂上?

时间:2010-05-27 20:09:43

标签: php oop class

我正在学习PHP中的课程,他们的例子就像......

class table { //makes a table
    private $tag ;
    function Begin($border=0, $align="center", $width='100%', $cellpadding=2, 
        $cellspacing=2, $class='', $id='', $bgcolor='', $style='') {
        $this->tag = '<table ' ;
        if ($align)              $this->tag .= 'align="' . $align . '" ' ;
        if ($width)              $this->tag .= 'width="' . $width . '" ' ;
        if ($border > 0)         $this->tag .= 'border="' . $border . '" ' ;
        if ($cellpadding > 0)     $this->tag .= 'cellpadding="' . $cellpadding . '" ' ;
        if ($cellspacing > 0)     $this->tag .= 'cellspacing="' . $cellspacing . '" ' ;
        if ($class)              $this->tag .= 'class="' . $class . '" ' ;
        if ($id)                  $this->tag .= 'id="' . $id . '" ' ;
        if ($bgcolor)              $this->tag .= 'bgcolor="' . $bgcolor . '" ' ;
        if ($style)              $this->tag .= 'style="' . $style . '" ' ;
        $this->tag .= ">" ;
        return $this->tag ;
    }

然后你只需实例化它并通过

创建一个表
$table =new table;
$table->$table($border=2, $align='center', etc);

我应该像这样编码html,css在课堂上吗? 我觉得以这种方式制作表格和表格比实际只是打字更令人困惑。我应该只进行类似的验证,从数据库中获取数据,以及类中的逻辑内容吗?

我应该使用什么类而不是?

3 个答案:

答案 0 :(得分:2)

你可以这样做......就个人而言,我不会。

使用domain objects的对象。举个例子,想象一下Facebook的源代码。我很确定在Facebook源代码的某个地方你会发现以下内容:

class Friend
{
    // ...
}

...同样,用PHP编写,你会发现这样的东西:

class Question
{
    var $originalPoster;
    var $answers = array();
    // ...

    function close()
    {
        // ...
    }
    // ...
}

使用对象封装复杂的想法和概念。在SO上有很多与问题相关的信息,但你可以将这些信息封装在一个对象中。

答案 1 :(得分:2)

也许这会清理它。最好扩展类以封装整个表,并使用重载,这样你甚至不必跟踪任何事情。您真正需要关心的是使用有效的HTML表格属性进行HTML验证。实际上,如前所述,对象只是让您更容易概念化您想要做什么以及如何组织您的想法。

使用以下解决方案,您不需要像对待html验证一样关注对象构造和默认值。在使用html表元素参数数组构建它之后(如果你愿意),你也可以在之后用参数重载对象。您还可以轻松添加行。完全未经测试但过度简化...

Class My_table {
   private $table_def = array();
   public $rows = array();

   function __construct($attributes_array) {
      if (is_array($attributes_array)) {
         foreach ($attributes_array as $key => $val) {
            $this->__set($key, $val);
            }
         }
      }

   function __set($attribute, $value) {
      $this->table_def[$attribute] = $value;
      }

   function draw() {
      // write table opening tag
      echo "<table";
      foreach($table_def as $key => $val) {
         echo " $key='$val'";
         }
      echo ">";
      // write all rows out
      foreach($rows as $current_row) {
          echo "<tr>";
          foreach($current_row as $field_name => $field) {
             echo "<td>$field</td>";
             }
          echo "</tr>";
          )
      // finish table
      echo "</table>";
      }
}

$table = new My_table(array(
   "style" => "boarder: solid thin gray;",
   "width" => "100px"
   ));
$table->height = "200px";
$table->rows[] = array("name" => "someone", "email" => "a@a.com")
$table->draw();

答案 2 :(得分:1)

对象可以表示您希望它们的任何,但它主要取决于您正在制作的应用程序类型。以HTML <table>的类为例,如果您的PHP软件并不太关心HTML,那么为HTML元素创建PHP类没有多大意义。

考虑一下你的申请。涉及哪些对象?例如,给定单作者博客,可以有帖子,评论,类别和标签。您希望拥有的相应课程自然是PostCommentCategoryTag

希望这有意义(这里有点晚了......)。