PHP学习笔记之二


Posted in PHP onJanuary 17, 2011

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新增的,用来判断一个对象是不是某个类的实例,或者它的类型是不撒实现了某个接口。
PHP 相关文章推荐
PHP 上传文件大小限制
Jul 05 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
php中实现xml与mysql数据相互转换的方法
Dec 25 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 PHP
laravel执行php artisan migrate报错的解决方法
Oct 09 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 PHP
PHP高并发和大流量解决方案整理
Mar 09 PHP
PHP学习笔记之一
Jan 17 #PHP
php下连接mssql2005的代码
Jan 17 #PHP
Php Image Resize图片大小调整的函数代码
Jan 17 #PHP
php生成随机密码的几种方法
Jan 17 #PHP
PHP校验ISBN码的函数代码
Jan 17 #PHP
PHP中用正则表达式清除字符串的空白
Jan 17 #PHP
php开发环境配置记录
Jan 14 #PHP
You might like
全国中波电台频率表
2020/03/11 无线电
php正则表达匹配中文问题分析小结
2012/03/25 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
javascript实现拖动元素交换位置
2015/11/29 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
python脚本替换指定行实现步骤
2017/07/11 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
时尚圣经:The Fashion Bible
2019/03/03 全球购物
职称自我鉴定
2013/10/15 职场文书
优秀员工评语
2014/02/10 职场文书
运动会广播稿20字
2014/02/18 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
Win11软件图标固定到任务栏
2022/04/19 数码科技