+ -
当前位置:首页 → 问答吧 → 昨天晚上写的一个类,好玩的

昨天晚上写的一个类,好玩的

时间:2007-01-30

来源:互联网

复制PHP内容到剪贴板
PHP代码:

<?php
/*
作者:№天♀与海
网站:http://xzy.ye55.com
本类实现的功能是自动把学生班级的编码转换成以下两种方式,
只需指定小学初中高中编码及入学年份,
本类会自己跟据现实中的年份来进行年级的调整。
有两种风格
第一种:你是初中2年级1班学生
第二种:初二(1)班
类调用方法:
$s=new classNj;
第一种风格
$s->banji("c-2005-1");
第二种风格
$s->banji2("c-2005-1");
*/
class classNj{
var $jb;    //小学初中高中代码,x为小学,c为初中,g为高中
var $nf;    //入学编号如2006年,四位编号
var $bh;    //班号,如4班
var $jbs;   //自动算出学生是小学还是初中或高中 
var $nfs;   //自动算出年级。
var $bjbm;  //学生所在的班级编码格式 x-2005-3
var $m;     //当前月份
function banji($bjbm)
{
  $this->bjbm=$bjbm;
  list($this->jb,$this->nf,$this->bh)=split('[-]',$this->bjbm);
  switch ($this->jb){
        case x:
       $this->jbs="小学";break;
        case c:
       $this->jbs="初中";break;
     case g:
       $this->jbs="高中";break;
  }
  $this->nfs=date(Y)-$this->nf;
  $this->m=date(m);
  $eede="你是".$this->jbs.$this->nfs."年级".$this->bh."班学生"; 
        if ($this->m>"09"){
          $this->nfs++;
    if($this->jb=="x"){
             if($this->nfs>6) echo "你已毕业!";
             else
             {if ($this->nfs<="0") {$this->nfs="你还没入学吧";echo $this->nfs; exit;}   echo $eede;}
            }
   else {
    if($this->nfs>3) echo "你已毕业!";
    else {if ($this->nfs<="0") {$this->nfs="你还没入学吧";echo $this->nfs; exit;}  echo $eede;}
   }
  }
         else{
    if($this->jb=="x"){
              if($this->nfs>6) echo "你已毕业!";
              else
               {if ($this->nfs<="0") {$this->nfs="你还没入学吧";echo $this->nfs; exit;}  echo $eede;}
             }
   else {
    if($this->nfs>3) echo "你已毕业!";
    else {if ($this->nfs<="0") {$this->nfs="你还没入学吧";echo $this->nfs; exit;} echo $eede;}
   }
  }
}
  function banji2($bjbm)
{
  $this->bjbm=$bjbm;
  list($this->jb,$this->nf,$this->bh)=split('[-]',$this->bjbm);
  switch ($this->jb){
        case x:
       $this->jbs="小";break;
        case c:
       $this->jbs="初";break;
     case g:
       $this->jbs="高";break;
  }
  $this->nfs=date(Y)-$this->nf;
  $this->m=date(m);
  switch ($this->nfs){
        case 1:
       $this->nfs="一";break;
        case 2:
       $this->nfs="二";break;
     case 3:
       $this->nfs="三";break;
        case 4:
       $this->nfs="四";break;
        case 5:
       $this->nfs="五";break;
     case 6:
       $this->nfs="六";break;
  }
  $eede=$this->jbs.$this->nfs."(".$this->bh.")班"; 
        if ($this->m>"09"){
          $this->nfs++;
    if($this->jb=="x"){
             if($this->nfs>6) echo "你已毕业!";
             else
             {if ($this->nfs<="0") {$this->nfs="你还没入学吧";echo $this->nfs;}else echo $eede;}
            }
   else {
    if($this->nfs>3) echo "你已毕业!";
    else {if ($this->nfs<="0") {$this->nfs="你还没入学吧";echo $this->nfs;}else  echo $eede;}
   }
  }
         else{
    if($this->jb=="x"){
              if($this->nfs>6) echo "你已毕业!";
              else
               {if ($this->nfs<="0") {$this->nfs="你还没入学吧";echo $this->nfs;}else  echo $eede;}
             }
   else {
    if($this->nfs>3) echo "你已毕业!";
    else {if ($this->nfs<="0") {$this->nfs="你还没入学吧";echo $this->nfs;}else echo $eede;}
   }
  }
}
}
$s=new classNj;
$s->banji2("c-2005-1");
echo "<br>";
$s->banji2("g-2003-5");
echo "<br>";
$s->banji2("x-2004-4");
echo "<br>";
$s->banji2("g-2007-3");
?>

这是我第一次写类..
大家帮我看下哪里有错,或是哪里可以更简单,。。谢谢了。。我是新手。。

[ 本帖最后由 dmkf 于 2007-1-30 00:34 编辑 ]

作者: dmkf   发布时间: 2007-01-30

首先,我也是新手,我没完整看你的代码,不过我还是可以给你指出我认为不合理的地方:
1:最好用访问修饰符private protected public 不然封装的意义不大,所以楼主赶快转到PHP5来
2:许多代码需要重构,类中的两个方法,重复的地方太多,而且做的事情太多了,方法应该细化,比如分别用几个内部方法(private)来获得入学编号,算出年级,输出信息等等,然后用两个服务方法(public)来调用这些内部方法达到目的。其实两个方法也完全可以用一个方法加上参数来实现。
面向对象设计的宗旨是可复用性和可维护性。如果按照楼主这样的设计,基本和面向过程没有什么差别。当然,我不是想贬低你的意思,呵呵,楼主继续努力。
给你推荐一本资料吧,在论坛原创区,刀客羽朋的 那本 《PHP面向对象》
相信对你帮助会很大。

作者: 玉面修罗   发布时间: 2007-01-30

建议你写一些中间件

作者: hobbs136   发布时间: 2007-01-30

呵呵,继续努力

作者: leehui1983   发布时间: 2007-01-30

呵,,谢谢指教了....我会继续努力的...

作者: dmkf   发布时间: 2007-01-30

学习了 ......  不过2种效果可以写在一个类里的

作者: 小竣   发布时间: 2007-02-02

引用:
原帖由 玉面修罗 于 2007-1-30 03:07 发表
首先,我也是新手,我没完整看你的代码,不过我还是可以给你指出我认为不合理的地方:
1:最好用访问修饰符private protected public 不然封装的意义不大,所以楼主赶快转到PHP5来
2:许多代码需要重构,类中 ...
这个是新手中的高手吧,哈哈

作者: zwws   发布时间: 2007-02-02

引用:
原帖由 <i>zwws</i> 于 2007-2-2 19:03 发表<br />

<br />

<br />
这个是新手中的高手吧,哈哈
<br />
应该是新手中的超级高手了,呵呵

作者: emyshen   发布时间: 2007-02-05