php数组 类和对象 接口使用方法
1. 数组
php的数组其实是一个关联数组,或者说是哈希表,php不需要预先声明数组的大小,可以用直接赋值的方式来创建数组,例如:
//最传统,用数字做键,赋值 $state [0]= "beijing" ; $state [1]= "hebei" ; $state [2]= "tianjin" ; //如果键是递增的数字,则可以省略 $city []= "shanghai" ; $city []= "tianjin" ; $city []= "guangzhou" ; //用字符串做键 $capital [ "china" ]= "beijing" ; $capital [ "japan" ]= "tokyo" ;用array()来创建数组会更加方便一点,可以将数组元素作为array的参数传递给他,也可以用=>运算符创建关联数组,例如:
$p = array (1,3,5,7); $capital = array ([china]=>]beijing], [japan=>]tokyo]);array其实是一种语法结构,而不是函数,和array类似,还有一个list(),它可以用来提取数组中的值,并给多个变量赋值,例如:
list( $s , $t )= $city ; echo $s , ' ' , $t ;输出结果:shanghai tianjin
注意,list方法只能用于由数字索引的数组.
php内建了一些常用的数组处理函数,具体可以参考手册,常用的函数举例如下,count或者sizeof可以得到数组的长度,array_merge 可以合并两个,或者多个数组,array_push(pop)可以像堆栈一样使用数组.
<?php $state [0]= "beijing" ; $state [1]= "hebei" ; $state [2]= "tianjin" ; $city []= "shanghai" ; $city []= "tianjin" ; $city []= "guangzhou" ; $capital [ "china" ]= "beijing" ; $capital [ "japan" ]= "tokyo" ; echo count ( $city ), '<br/>' ; array_push ( $capital , "paris" ); $newarray = array_merge ( $city , $capital ); foreach ( $newarray as $elem ) //开源代码phpfensi测试数据 echo $elem .’<br/>’; ?> //输出结果为: //3 //shanghai //tianjin //guangzhou //beijing //tokyo //paris2. 类和对象
php5开始对面向对象编程有了很好的支持,php中的类的概念和其他面向对象的语言比如c#是十分相似的,它也是一个值和方法的聚合体,使用class关键字定义,例如:
<?php class authuser { protected $username ; protected $password ; public function __construct( $username , $password ) { $this ->username= $username ; $this ->password= $password ; } public function getusername() { return $username ; } public function changepassword( $old , $new ) { if ( $this ->password== $old ) { $this ->password= $new ; return true; } else return false; } public function login( $password ) { return $this ->password== $password ; } public static function createuser( $username , $password ) { $user = new authuser( $username , $password ); return $user ; } } $user =authuser::createuser( "admin" , "123" ); echo $user ->getusername(); if ( $user ->changepassword( 'abc' , 'new' )) echo 'changepassword success' ; else echo 'change password fail' ; $user ->changepassword( "123" , "321" ); if ( $user ->login( "321" )) echo "login" ; else echo "login fail" ; ?>上面是一个虽然没有什么用但是语法结构上较为完整的类,首先使用class关键字定义类的名字,内部可以定义字段和方法,字段和方法的修饰词可以是private,protected,public 和 final,仅方法有,其含义和其它语言一致,不再赘述,不同的地方在于,php不支持函数的重载,另外,php5的构造函数的定义是__construct,注意前缀是两个下划线。php4的构造函数的定义和其它语言一致,是和类名一样的函数,php5也兼容这种写法。php5还支持析构函数,名字是__destruct,在函数内部,可以使用$this变量来获得当前对象的引用,php也支持静态函数,同样是使用static关键字修饰,示例中最后一个函数就静态函数,静态函数不能通过类的实例引用.
类的定义下面是使用类的代码示例,php也是通过new关键字来实例化一个类,通过->运算符来引用对象的方法,注意其静态类的引用方法是::,这是和c++一致的.
下面再简单介绍下类的继承,php中使用extends关键字来实现类的继承,这是和java一致的,实例代码如下:
<?php class baseclass { function __construct() { print "in baseclass constructorn" ; } } class subclass extends baseclass { function __construct() { parent::__construct(); print "in subclass constructorn" ; } } $obj = new baseclass(); $obj = new subclass(); ?> //输出的结果是: in baseclass constructor in baseclass constructor in subclass constructor要注意,php的子类的构造函数不会自动调用父类的构造函数,必须在程序中显式地调用,使用parent关键字可以得到父类的引用,另外,由于php本身是弱类型的,所以[多态[的概念也不存在了,实际上,它永远都是多态的.
接口: 接口定义了一组方法,但不实现他们,其语法为:
interface iinterfacename { //常量、函数定义 }类利用implements关键字来表面实现某个接口,这和java是一致的.
<?php interface iaddable{ function add( $something ); } class addclass implements iaddable { private $data ; function addclass( $num ){ $data = $num ; } public function add( $something ) { $data += $something ; return $data ; } } $a = new addclass (5); echo $a instanceof iaddable; echo $a ->add(10); ?>查看更多关于php数组 类和对象 接口使用方法 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30216