当前位置:编程学习 > wap >>

WAP与PHP - 进阶篇 之二

答案:

WAP与PHP - 进阶篇
WAP&PHP | 基础篇 | 附件
2.对象实现
  我们将利用以上定义的常量和函数实现我们定义的若干对象。我们从上层对象开始,逐步向下实现,上层对象可以调用下层对象的方法。在实现过程中可以经常参考图1,明确对象的关系。


2.1 Deck对象的实现 2.2 Text对象的实现 2.3 Image对象的实现
2.4 Table对象的实现 2.5 Row对象的实现 2.6 Hyperlink对象的实现
2.7 Input对象的实现 2.8 Select对象的实现 2.9 Do对象实现
2.10 Fieldset对象的实现

2.1 Deck对象的实现 [TOP]
  首先确定Deck对象的属性,如表1所示。

属性名称 含义
$card_title 标题
$card_alignment 页面格式
$card_element Card所包含的元素,如Text、Table等
$element_number Card中所包含的元素数目
$default_item 变量及其默认值数组
$default_number 默认值数组元素数目
表1 Deck对象的属性

接着确定Deck对象的方法,如表2所示。

方法名(函数) 功能
My_Deck 自构函数,对象创建时被自动调用
Add_Element 加入元素,如Text、Image、Table、Hyperlink、Input、Select、Do等
Make_Deck 建立Deck(最关键的函数,它将最终产生需要的Deck)
表2 Deck对象的方法

  在我们所定义的函数中,比较复杂的是Add_Element函数和Make_Deck函数。
  
  Add_Element函数的入口参数为任何一种所定义的元素,如Text、Image等。函数开始先进行入口参数的检查,判断是否为合法对象,这种检查还会经常出现在后续的对象实现中。如果检查入口参数不是对象,则将出错退出。接下来判断入口参数是否为我们已经定义过的对象种类,如果是,则将其假如到card_element属性中,并使element_number计数器加1。如果入口参数是无法识别的对象,则程序报错退出。
  Make_Deck函数很复杂,我们按以下步骤实现:
  1.发送标头;
  2.产生Deck头代码;
  3.利用相应对象封装的get_defaults函数获取某些元素,如Select、Fieldset等中的变量的默认值(如果存在);
  4.如果缺省值存在,列出与缺省值相关的代码,即进入页面后自动刷新相应变量为缺省值;
  5.设置页面格式;
  6.对Deck中包含的每一个对象调用其封装的Make_Element函数产生各自的代码;
  7.产生Deck结束代码。
  
  虽然我们在此列出的步骤很简单,但是具体的实现却牵扯到很多细节,而这些实现需要编程人员对WML语言比较了解,特别是对Deck和Card的构造很熟悉。下面列出了其中比较复杂的获取变量默认值部分的代码和创建各元素部分代码的源程序,这两个部分体现了PHP语言面向对象编程的特点。



 //获取交互元素如Input,Select的一些变量默认值
  while(list($thekey,$thevalue)=each($this->card_element))
  {
  switch($thevalue->My_Type())
  {
  case I_AM_SELECT:
  case I_AM_FIELDSET:
  {
  $temp_element=$thevalue;

  $temp_default=$temp_element->get_defaults();
  
  if($temp_default)
  {
   $this->default_item[$this->default_number]=$temp_default;

   $this->default_number++;
   break;
   }
   default:
   {
   break;
   }
  }
  }

 //产生相关元素各部分的代码
   for($i=0;$i<$this->element_number;$i++)
   {
   $the_element = $this->card_element[$i];
   switch ($the_element->My_Type())
   {
   case I_AM_TEXT:
   case I_AM_IMAGE:
   case I_AM_TABLE:
   case I_AM_HYPERLINK:
  case I_AM_INPUT:
  case I_AM_SELECT:
  case I_AM_D
  case I_AM_FIELDSET:
    {
    $temp_element = $this->card_element[$i];
 
    $temp_element->Make_Element(&$this);

    break;
   }
   default:
  {
  break;
  }
  }
  }

  由于篇幅原因,细节实现不在此讨论,读者可以参阅所附的代码。

2.2 Text对象的实现 [TOP]
  Text对象是我们定义的第1个元素对象。它包含的属性和函数如下表所示:   

属性名称 含义
$text 文本内容
$attribute 文本格式属性
$br_count 文本后空行数目
表3 Text对象的属性

方法名(函数) 功能
My_Text 自构函数,对象创建时被自动调用
set_br_count 设置空行数目
My_Type 返回对象类别(I_AM_TEXT)
Make_Element 产生与Text对象相关的代码
表4 Text对象方法
  在各函数中,Make_Element函数将被Deck对象使用,My_Type函数也将被调用以供Deck对象确定本对象的类型。
  
  Make_Element对象的实现比较复杂,其相关代码如下所示。在代码中,首先产生有关Text格式的代码,然后再产生Text内容,最后产生代码结尾。

//创建Text部分代码
  function Make_Element($deck)
  {
  if ($this->attribute & TEXT_BOLD)
  echo "<b>\n";

   if ($this->attribute & TEXT_UNDERLINE)
  echo "<u>\n";

  if ($this->attribute & TEXT_ITALIC)
  echo "<i>\n";

  if ($this->attribute & TEXT_BIG)
  echo "<big>\n";
  
  if ($this->attribute & TEXT_SMALL)
  echo "<small>\n";

  if ($this->text)
  printf("%s\n", convert_character($this->text));

  if ($this->attribute & TEXT_SMALL)
  echo "</small>\n";

  if ($this->attribute & TEXT_BIG)
   echo "</big>\n";

  if ($this->attribute & TEXT_ITALIC)
  echo "</i>\n";

  if ($this->attribute & TEXT_UNDERLINE)
  echo "</u>\n";

  if ($this->attribute & TEXT_BOLD)
   echo "</b>\n";

  $br_command = "<br/>\n";
  for ($i=0; $i<$this->br_count; $i++)
  echo $br_command;
  }

2.3 Image对象的实现 [TOP]
  Image对象代表了图象元素,其包含的属性和方法如下表所示:



属性名称 含义
$wbmp_url 图片地址
$alt_text 图片文本描述(当图片无法显示时则显示文本)
$br_count 图片后空行数目
表5 Image对象的属性

方法名(函数) 含义
My_Image 自构函数,对象创建时被自动调用
set_br_count 设置空行数目
My_Type 返回对象类别(I_AM_IMAGE)
Make_Element 产生与Image对象相关的代码
表6 Image对象方法

上一个:WAP与PHP - 基础篇
下一个:WAP与PHP - 附件

更多图片编程知识:
更多wap疑问解答:
新人求助QPainter
为什么程序都退出了还可以收到推送?如果大多设备都可以推送那运营商怎么办?
qt 4.7 sqlserver2000 存储过程调用
关于ANDROID4.0.1编译问题!
Android FrameBuffer读屏幕30秒后mmap失败
联通粗定位用java程序如何来请求和接受数据
为什么QT运行Android平台的程序时,mouseMoveEvent事件响应的间隔时间很长??????????
android与PC蓝牙通讯
指定大小的label 内容可变,如果内容超出label的宽度,将未能显示的部分显示在另一个label上
Android调试
android如何通过wifi连接无线打印机
运行程序,release目录下产生一个乱码文件夹
分享个某机构最新安卓资料,自己验证了
service启动不起来,掉不了service connection
求助:QT5.0 没有QPrinter吗
asp
php
Delphi
Matlab
JSP
Foxpro
JS
C/C++
C#/ASP.NET
VC++
JAVA
VB
汇编语言
html/css
CGI
XML/UML
wap
网站相关
网页素材
python
微信小程序
thinkphp
如果你遇到编程学习难题:
访问www.zzzyk.com 试试
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,