服务器 频道

PHP中的类

  试验以下下面的PHP代码(假设你已经包含了Style类,并为其创建了一个实例$Basic,然后页面中已经有了 和 <HEAD></HEAD> 标签)

  <?php $Basic->Body(); ?>

  这样我们就可以输出一些东西到页面中了,我们可以采用传统的方法,但我想做点不同的….(这个作者故弄玄虚,幽默过头了—译者注)这就是我用的另外一个成员函数TextOut:

  <?php

  function TextOut($message= " ") {

  PRINT " "text">$message ";

  }

  ?>

  这个函数需要一个参数$message,$message是你要输出的文字,该函数会以指定的属性输出这些文字。我们可以通过如下方法实现:

  <?php

  $Basic->TextOut( ''This is my test message'');
  $Tbody->TextOut( '' -- kinda neat, huh?'');

  ?>

  注意,由于这两个函数中间没有输出回车换行<br>,所以结果将输出到同一行上。而我还想要第二部分的字体更小一点,这个我在上面的$Tbody对象中已经声明了,这样比较安全,$Tbody与$Basic唯一的不同还有个$bgcol属性,在这里没有用到。注意到了程序声明中的” ”吗?这是用来在没有参数传递给函数时函数,函数就输出缺省的不间断空格,原因后述。

  到目前为止,我们的工作还没有保存。最后的一个例子说明如何通过一种简单的方法,来修改字体的颜色和或大小,即使在一个输出语法的中间,也不需要改动整个类。我们加入如下的代码:

  <?php

  function TDOut ($message= " ",$colspan=1) {

  PRINT "<TD COLSPAN=$colspan BGCOLOR="$this->bgcol" ".
  "ALIGN="$this->align" VALIGN="$this->valign">";
  $this->TextOut($message);
  PRINT "</TD>
  ";

  }

  ?>

  那么,讲解就到此为止!记住我想让我的表格有不同的背景颜色,我可以这样实现:

  <TABLE>
  <TR>
  <?php

  $Theader->TDOut( "Name",2);
  $Theader->TDOut( "Location",3);

  ?>
  </TR>
  <TR>
  <?php

  $Theader->TDOut( "Last");
  $Theader->TDOut( "First");
  $Theader->TDOut( "City");
  $Theader->TDOut( "State/Province");
  $Theader->TDOut( "Country");

  ?>
  </TR>

  这里,你可以看到colspan参数是如何起作用的,如果没有声明,将会有个缺省值1。于是在第一个行“Name”中,合并了2列;Location行合并了3列。第二行,所有的列都被合并成了一个。

  我们通过如下方式来实现表体:

  <TR>
  <?php

  $Tbody->TDOut( "Kreisler");
  $Tbody->TDOut( "Rod");
  $Tbody->TDOut( "Cortlandt");
  $Tbody->TDOut( "New York");
  $Tbody->TDOut( "USA");
  ?>
  </TR>

  但看起来似乎仍然有些繁琐,我们是否可以节省更多的步骤?那么采用下面的函数:

  <?php

  function TROut($message) { /*And NO comments about fish, please! ;) */

  PRINT "<TR>
  ";
  $cells=explode( "|",$message);
  $iterations=count($cells);
  $i=0;
  while ($i<$iterations) {
  list($message,$span)=explode( ":",$cells[$i]);
  if (strlen($message)<1) $message= " ";
  if ($span){
  $this->TDOut ($message,$span);
  }else{
  $this->TDOut ($message);
  }
  $i++;
  }
  PRINT "</TR>
  ";

  }

  ?>

  WOW!看起来有些繁琐,我们来分解一下:

  第3行根据”|”符号分解一个字符串,并且将分解出来的每个元素都放到数组$cell中。第四行取得数组的中数组元素的个数到$iterations;第6行开始一个循环处理数组中的每个元素。第7行以”:”作为分隔符分解一个数组元素,将其存储到$message和$span中。第8行检查$message是否有值。如果没有就赋一个缺省值。第九行检查有没有$span(就是合并不合并单元格,通过$cell数据中冒号后还有$span来要确定),如果是这样,第10行调用TDOut函数,传递$message和单元格个数参数;如果没有第12行程序单纯输出$message信息(TDOut函数就用缺省值1来设置$colspan属性)。最后,我们结束一个表格行(通过</tr>)。

  或许你看了还有些糊涂(不糊涂才怪),到底如何传递给TROut参数才能包括所有的必要信息?正确地格式就是:celldata[:colspan]|celldata[:colspan]|......celldata[:colspan](用|分隔单元格,单元格中数据后跟:号分隔的合并单元格的数目来指定要扩展本单元格的个数—译者注。)

  所以,总结一下我们以前所作的工作,表头和表体可以通过下面的调用来完成:

  <TABLE>
  <?
  $Theader->TROut( "Name:2|Address:3");
  $Theader->TROut( "First|Last|City|State/Province|Country");
  $Tbody->TROut( "Rod|Kreisler|Cortlandt|New York|USA");
  ?>
  </TABLE>

  Wow!是不是非常的简单?(实际上的确非常简单,但是这个作者写的还不足以让人认识到这一点。也就是说给的例子缺乏说服力,我个人就觉得依靠TROut这行代码,输出一个行还不如样式表来得简单。作者起码用一个BBS的例子来说明OOP在PHP中的用处才有意义。当然了,作为PHP中OOP的入门课程,本文也算生动了,而且各个方面讲得也差不多。)。

  如果有单元格中的数据存放在变量中的情况怎么办?只要Join数组就可以了:

  <?php

  $message=join($arry, "|");
  $Tbody->TROut($message);

  ?>

  当然,你不能在一个Join中同时输入列扩展的单元格数,但是你可以再用一个。假设你的数组包含6个元素,第3和第4行分别要扩展2个和3个单元格,你可以通过如下代码实现将:#扩展格数参数指定到$message中

  $newarray=$arry;
  $newarray[2]=join(list($newarray[2],"2"),":");
  $newarray[4]=join(list($newarray[4],"3"),":");
  $message=join($newarray,"|");
  $Tbody->TROut($message);

  显然,你可以加入更多的成员函数。如果有人有更好的想法,可以Email给我,我会封装更多的代码并发表出来。

0
相关文章