我应该把什么东西放进课堂,我不应该做什么?

问题描述:

我正在学习有关课程,现在在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是在课堂上? 我觉得以这种方式制作表格和表格会更困惑,然后实际上只是打字。我只应该像验证,从数据库中获取数据,以及类中的逻辑东西吗?

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

+1

你在哪里得到这个例子?谁写的,应该被枪杀。 – 2010-05-27 20:40:15

你可以这样做......我个人不会。

使用对象domain objects。举个例子,想象一下Facebook的源代码。我敢肯定,在某处Facebook的源代码,你会发现如下:

class Friend 
{ 
    // ... 
} 

......同样,如此用PHP编写的,你会发现这样的事情:

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

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

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

对象可以代表什么你想要它们,但它主要取决于你正在做什么样的应用程序。以您的HTML <table>类为例,如果您的PHP软件不太关心HTML,那么为HTML元素创建PHP类没有多大意义。

想想你的应用程序。它涉及哪些对象?例如,给定一个作者的博客,可以有帖子,评论,分类和标签。您想要的相应类自然会是Post,Comment,CategoryTag

希望这是有道理的(这里有点晚了......)。

+0

是的,它确实!谢谢。现在我有一个配置文件,索引,张贴。所以我认为我会为每个人做一个课。 – jpjp 2010-05-27 20:32:03

也许这会清理它。最好扩展这个类来封装整个表,并使用重载,这样你甚至不需要跟踪任何东西。你真正需要关心的是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" => "[email protected]") 
$table->draw(); 
+0

另外,当然,完全没有必要为了制作类似网格的表格而创建一个类,除非您有几十页的网格状表格。即使如此,如果您需要在您的站点上标准化表格样式,那么这就是CSS的用途。 – 2010-05-27 21:57:32

+0

谢谢!好例子 – jpjp 2010-05-28 00:31:32