PHP学习笔记之二 |
本文标签: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) echo $elem.<br/>; ?> 输出结果为: 3 Shanghai Tianjin Guangzhou Beijing Tokyo Paris 2. 类和对象 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 constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } $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); ?> 其中 instanceof关键字是PHP5新增的,用来判断一个对象是不是某个类的实例,或者它的类型是不撒实现了某个接口 。 |