azhai

学习心得(1)- 类

 
        决定学习php还是一个星期以前的事了,那时,刚好手头要做一个网站。正寻思用什么工具开发时,看到
  
   http://devzone.zend.com/node/view/id/627(不是在做广告,你可以不看的,好像zend也不用) 这里的
文章,一口气看完,哈,不错,语言和C#很像。拿来用用,果然不错,所以决定用php(有点仓促),还有一个原因当然就是免费了,操作系统用ubuntu 7.04 +LAMP 这些都是免费的开源的,用着放心。

  那就开始。注意她和C#的区别
<!--
学习类之前,先掌握几个函数:
1、 func_get_arg(int $arg_num)
    返回参数列表,传回项目
    返回类型:mixed;
    说明:返回自定义函数列表的第$arg_num个参数,默认从0开始,如果$arg_num的值大于实际列表的值,返回false;
2、 func_get_args()
    返回包含函数参数的数组。
    说明:返回数组,数组的数目由参数列组成。
3、 func_num_args()
    返回传递的函数数量。
4、 function_exists()
    检查函数是否存在。 
-->
<?php

/* 演示继承类  */
//创建一个基类
class A {
       
   function __construct( ) { }
   function myfun()
   {
       echo "Class A : 类 A ";
   }
  function __destruct() {
   }
}

/* 测试
 $a=new A();
 $a->myfun();
*/

//继承 类A 的 
Class B extends A
{
   function __construct() {}  
   function myfun($str){
       echo A::myfun()."Class B : 类 B ".$str."\n";
   }  
   function __destruct(){}
}

Class C extends B  //不支持多重继承
{
   function __construct() {}
  
   function myfun($str){
       echo A::myfun()."\n";  //这样表示继承至 A (应为父类B继承了A)
       echo parent::myfun($str)."\n"; //这样表示继承至 B
       echo "Class C : 类 C\n";
   }  
   function __destruct(){}
}

/* 测试结果
$m=new C();
$m->myfun('hello');
*/

/* 演示重载构造函数(变通的方法)*/
Class D
{  
  function d(){
      $name="d".func_num_args();
    $this->$name();
  }  
 
  function d1() {
      echo 'd1';
  }
   
  function d2(){
    echo 'd2';
  }
}

/* 测试结果
$d=new D(1); //调用d1
$d=new D(1,2); //调用d2
*/

/* 抽象类和接口 */
//先定义抽象类
abstract class E {
   function myfun(){}
   function myfun1(){}
}

//继承抽象类
class F extends E {
   function myfun(){ echo "类 F 继承抽象类: E\n"; }   
}

//继承抽象类
class G extends E {
   function myfun1(){ echo "类 G 继承抽象类: E\n"; }   
}

/* 测试
$E=new E();  //这样就会出错,抽象类不能被实例化。
$f = new F();
$f->myfun();
$g = new G();
$g->myfun1();
*/
// 定义一个接口
interface ih{
   public function myfun();
   public function myfun1($a,$b);
}

class H implements ih {
    public function myfun()
    {
        echo "实现接口 ih 函数:myfun ";
    }
   
    public function myfun1($a,$b)
    {
        echo "实现接口 ih 函数:myfun 参数1:".$a." 参数2 ".$b;
    }
   
}

/*
//以下就会提示错误: Class I contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (ih::myfun)
class I implements ih {       
    public function myfun1($a,$b)
    {
        echo "实现接口 ih 函数:myfun 参数1:".$a." 参数2 ".$b;
    }
}*/

/* 测试
$h=new H();
$h->myfun();
$h->myfun1(1,a);
*/

/* 定义一个枚举enum类 */

class enum {
  private $__this = array();
  function __construct()
  {
      //调用属性构造器
    $args = func_get_args();
    $i = 0;
    do{
      $this->__this[$args[$i]] = $i;
    } while(count($args) > ++$i);
  }
 
  //属性构造器
  public function __get($n){
    return $this->__this[$n];
  }
};

/*  测试结果
$days = new enum(
      "Sunday",
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday"
    );
$today = $days->Thursday;
echo "enum : ".$today;
*/




?>
 

posted on 2007-08-28 15:03 azhai 阅读(697) 评论(0)  编辑 收藏 引用 网摘


只有注册用户登录后才能发表评论。
网站导航: