当前位置:首页 > PHP教程 > php高级应用 > 列表

php数组 类和对象 接口使用方法

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-08 22:02:58 浏览: 评论:0 

1. 数组

php的数组其实是一个关联数组,或者说是哈希表,php不需要预先声明数组的大小,可以用直接赋值的方式来创建数组,例如:

  1. //最传统,用数字做键,赋值 
  2. $state[0]="beijing";  
  3. $state[1]="hebei";  
  4. $state[2]="tianjin"
  5. //如果键是递增的数字,则可以省略 
  6. $city[]="shanghai";  
  7. $city[]="tianjin";  
  8. $city[]="guangzhou"
  9. //用字符串做键 
  10. $capital["china"]="beijing";  
  11. $capital["japan"]="tokyo"

用array()来创建数组会更加方便一点,可以将数组元素作为array的参数传递给他,也可以用=>运算符创建关联数组,例如:

  1. $p=array(1,3,5,7); 
  2. $capital=array(“china”=>”beijing”, “japan=>”tokyo”); 

array其实是一种语法结构,而不是函数,和array类似,还有一个list(),它可以用来提取数组中的值,并给多个变量赋值,例如:

  1. list($s,$t)=$city;  
  2. echo $s,' ',$t

输出结果:shanghai tianjin

注意,list方法只能用于由数字索引的数组.

php内建了一些常用的数组处理函数,具体可以参考手册,常用的函数举例如下,count或者sizeof可以得到数组的长度,array_merge 可以合并两个,或者多个数组,array_push(pop)可以像堆栈一样使用数组.

  1. <?php 
  2.         $state[0]="beijing"
  3.         $state[1]="hebei"
  4.         $state[2]="tianjin"
  5.         $city[]="shanghai"
  6.         $city[]="tianjin"
  7.         $city[]="guangzhou"
  8.         $capital["china"]="beijing"
  9.         $capital["japan"]="tokyo"
  10.          
  11.         echo count($city),'<br/>'
  12.          array_push($capital,"paris"); 
  13.         $newarray=array_merge($city,$capital); 
  14.         foreach($newarray as $elem
  15.         //开源代码phpfensi.com 
  16.             echo $elem.’<br/>’; 
  17.     
  18. ?> 
  19. //输出结果为: 
  20. //3  
  21. //shanghai  
  22. //tianjin  
  23. //guangzhou  
  24. //beijing  
  25. //tokyo  
  26. //paris 

2. 类和对象

php5开始对面向对象编程有了很好的支持,php中的类的概念和其他面向对象的语言比如c#是十分相似的,它也是一个值和方法的聚合体,使用class关键字定义,例如:

  1. <?php 
  2.       class authuser { 
  3.           protected $username
  4.           protected $password
  5.           public function   __construct($username,$password) { 
  6.               $this->username=$username
  7.               $this->password=$password
  8.           } 
  9.           public function getusername() { 
  10.               return $username
  11.           } 
  12.           public function changepassword($old,$new) {                 
  13.               if($this->password==$old) { 
  14.                   $this->password=$new
  15.                   return true; 
  16.               }else 
  17.                   return false; 
  18.           } 
  19.           public function login($password) { 
  20.               return $this->password==$password
  21.           } 
  22.           public static function createuser($username,$password) { 
  23.               $user=new authuser($username,$password); 
  24.               return $user
  25.           } 
  26.       } 
  27.       $user=authuser::createuser("admin","123"); 
  28.       echo $user->getusername(); 
  29.       if($user->changepassword('abc''new')) 
  30.           echo 'changepassword success'
  31.       else 
  32.           echo 'change password fail'
  33.       $user->changepassword("123""321"); 
  34.       if($user->login("321")) 
  35.           echo "login"
  36.       else 
  37.           echo "login fail"
  38.       ?> 

上面是一个虽然没有什么用但是语法结构上较为完整的类,首先使用class关键字定义类的名字,内部可以定义字段和方法,字段和方法的修饰词可以是private,protected,public 和 final,仅方法有,其含义和其它语言一致,不再赘述,不同的地方在于,php不支持函数的重载,另外,php5的构造函数的定义是__construct,注意前缀是两个下划线。php4的构造函数的定义和其它语言一致,是和类名一样的函数,php5也兼容这种写法。php5还支持析构函数,名字是__destruct,在函数内部,可以使用$this变量来获得当前对象的引用,php也支持静态函数,同样是使用static关键字修饰,示例中最后一个函数就静态函数,静态函数不能通过类的实例引用.

类的定义下面是使用类的代码示例,php也是通过new关键字来实例化一个类,通过->运算符来引用对象的方法,注意其静态类的引用方法是::,这是和c++一致的.

下面再简单介绍下类的继承,php中使用extends关键字来实现类的继承,这是和java一致的,实例代码如下:

  1. <?php 
  2.         class baseclass { 
  3.             function __construct() { 
  4.                 print "in baseclass constructorn"
  5.             } 
  6.         } 
  7.         class subclass extends baseclass { 
  8.             function __construct() { 
  9.                 parent::__construct(); 
  10.                 print "in subclass constructorn"
  11.             } 
  12.         } 
  13.        
  14.         $obj = new baseclass(); 
  15.         $obj = new subclass(); 
  16. ?> 
  17. //输出的结果是: in baseclass constructor in baseclass constructor in subclass constructor 

要注意,php的子类的构造函数不会自动调用父类的构造函数,必须在程序中显式地调用,使用parent关键字可以得到父类的引用,另外,由于php本身是弱类型的,所以“多态“的概念也不存在了,实际上,它永远都是多态的.

接口:接口定义了一组方法,但不实现他们,其语法为:

  1. interface  iinterfacename 
  2.    //常量、函数定义  

类利用implements关键字来表面实现某个接口,这和java是一致的.

  1. <?php 
  2.    interface iaddable{ 
  3.       function add($something); 
  4.    } 
  5.    class addclass implements iaddable 
  6.    { 
  7.        private $data
  8.        function addclass($num){ 
  9.            $data=$num
  10.        } 
  11.        public function add($something
  12.        { 
  13.            $data+=$something
  14.            return $data
  15.        } 
  16.    } 
  17.    $a=new addclass (5); 
  18.    echo $a instanceof iaddable; 
  19.    echo $a->add(10); 
  20. ?> 

Tags: php数组 php类 php接口

分享到: