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新手上路(八)
Oct 09 PHP
php快速url重写 更新版[需php 5.30以上]
Apr 20 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
深入解析php中的foreach函数
Aug 31 PHP
CodeIgniter基本配置详细介绍
Nov 12 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
PHP is_array() 检测变量是否是数组的实现方法
Jun 13 PHP
PHP二维数组矩形转置实例
Jul 20 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
laravel使用数据库测试注意事项
Apr 10 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
php include加载文件两种方式效率比较
2010/08/08 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
python集合用法实例分析
2015/05/30 Python
Django中的文件的上传的几种方式
2018/07/23 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
Python标准库itertools的使用方法
2020/01/17 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
办公室经理岗位职责
2014/01/01 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
代办委托书怎么写
2014/08/01 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
网络舆情信息简报
2015/07/21 职场文书
安全主题班会教案
2015/08/12 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
python 爬取华为应用市场评论
2021/05/29 Python