red{color:red;}
php学习笔记–初级
2017.1.24-2017.1.28
第一章 初识PHP
什么是php
- PHP(Hypertext Preprocessor,超文本预处理器)
- 跨平台windows、Linux、Unix
- 服务端脚本语言
- 与Apache很好的适应
- 无需编译
第二章 PHP环境搭建和开发工具
wamp
- Windows
- Apache
- MySQL
- PHP
第三章 php语言基础
php标记风格(4种)
xml风格(推荐)
<?php echo '这是xml风格的标记'; ?>
脚本风格
<script language="php"> echo '这是脚本风格的标记'; </script>
简短风格(需配置)
<? echo '这是简短风格的标记'; ?>
asp风格(需配置)
<% echo '这是ASP风格的标记'; %>
注释
单行注释
<?php echo "hello world"; //这是单行注释 ?>
多行注释
<?php echo "hello world"; /* 多行注释 */ ?>
php数据类型
- 标量类型(4种)
- boolean(布尔型)
- integer(整型)
- float(浮点型)
- string(字符串)
- 复合类型(2种)
- array(数组)
- object(对象)
单引号与双引号的区别
双引号可以解析其中的变量,而单引号会把其中的字符全部当成字符串处理。所以定义字符串是建议使用单引号。
浮点型
浮点型的数值只是一个近似值,所以应该尽量避免浮点型数值之间的比较大小,因为这样的比较往往是不准确的。
整形
如果给定的数值超出了int型的最大值,将会被当做浮点型处理。
检测数据类型
- is_bool() : 检测是否为bool类型变量
- is_string() : 检测变量是否为字符串类型
- ……
- is_numeric(): 检测变量是否为数字或者为数字组成的字符串
PHP常量
语法格式:define(name,value,case_sensitive)
name(string):常量的名字
value:值
case_sensitive(boolean):对大小写是否敏感,true为不敏感
php变量
- 变量名=$+标识符
- 区分大小写
- 标识符以字母和下划线开头
引用
在变量的前面加上&
变量作用域
局部变量,只在其函数内部有作用
全局变量,在整个php文件有作用,用户自定义的函数使用时,要用global声明全局变量
静态变量,在函数调用结束后仍存在,用static声明
可变变量
一个变量的名称由另一个变量的值来决定。实现:在一个变量前面加上$号
字符串的连接
两个字符串之间用.来连接,不能用+
php编码规范
- 缩进,tab
大括号
if($exp){ } 或 if($exp) {}
- 关键字和小括号隔开。if (),if和左边的括号有一个空格
- 函数和小括号紧贴在一起。round()
- 运算符和两边变量要有空格(.除外)。a == b
php命名规则
- 类命名。大驼峰法
- 类属性命名。以m开头,其后与类命名一致
- 方法命名。Is(判断)、Get(得到)、Set(设置)、
- 方法的参数。小驼峰法
- 变量命名。所有的字母小写,以_分隔单词
- 引用变量/函数命名。带r前缀
- 全局变量命名。带g前缀
- 常量/全局常量命名。字母全部大写,单词用_分隔
- 静态变量命名。带s前缀
- 函数命名。所有字母小写,单词用_分隔
第四章 流程控制
第五章 字符串操作
trim函特数
作用:去除字符串首尾的空格和特殊字符
格式:string trim(string str[,string charlist]);
如果charlist为空,则可选字符都被删除
charlist可选字符
- \0。null,空值
- \t。tab,制表符
- \n。换行符
- \x0B。垂直制表符
- \r。回车符
” “。空格
例子:去除字符串的“(@@)”,
str=”(@字符串@)”; str=trim($str,“(@@)”);
ltrim函数
删除左边空格和特殊字符
rtrim函数
删除右边空格和特殊字符
转义、还原字符串
“\”是一个转义字符,紧跟在“\”后的第一个字符将变得没有意义或没有特殊意义
addslashes函数
作用:自动转义字符串
语法格式:string addslashes(string str)
scripslashes函数
作用:还原被addslashes函数转义的字符串
格式:string scripslashes(string str)
addcslashes函数
作用:指定转义的字符
格式:string addcslashes(string str,string charlist)
scripcslashes函数
作用:还原被addslashes函数专一的字符串
格式:string scripcslashes(string str)
获得字符串的长度(汉字占两个字符)
语法格式:int strlen(string str)
截取字符串
语法格式:string substr(sting str, int start[, int length])
参数解释:
str:被截取的字符串
start:开始截取的位置,如果为负数,则表示从字符串末尾开始截取
length:截取的字符数,如果为负数,则表示取到倒数第length个
比较字符串
- strcmp(string str1, string str2)
按字节进行比较,大小写敏感 - strcasecmp(string str1, string str2)
忽略大小写 - strnatcmp(string str1, string str2)
将字符串的数字部分按照自然大小比较,2<10 - strcmp(string str1, string str2, int len)
比较前len个字符串
检索字符串
语法格式:string strstr(string haystack, string needle)
参数说明:
haystack:被检索的字符串
needle:备件所的对象
成功返回needle,失败返回:false
子串出现的次数
语法格式:int substr_count(string haystack, string needle)
替换字符串
str_ireplace()
语法格式:mixed str_ireplace(mixed search, mixed replace, mixed subject[, int &count]) 参数说明: search:要替换的字符串 replace:替换的值 subject:操作的字符串 count:获得替换的次数 注意:执行替换操作时不区分大小写,str_replace()函数区分大小写
substr_replace()
语法格式:string substr_replace(string str, string repl, int start[, int length]) 参数说明: str:操作的原始字符串 repl:替换的值 start:替换开始的字符串,负数表示替换从字符串的尾部开始 length:替换的长度,负值表示从字符串的后面开始替换
格式化数字字符串
语法格式:string number_format(float number[, int num_decimal_places][, string dec_seperator, string thousands_seperator])
参数说明:(参数个数1、2、4,不能为3位)
number:要格式化的浮点数
num_decimal_places:保留小数的位数
dec_seperator:小数与整数的分隔符
thousands_seperator:每3个整数的分隔符
分隔字符串
语法格式:array explore(string seperator, string str[, int limit])
参数说明:
seperator:分割表示符,如果为""则返回false,如果在str中找不到则返回包含str的单元素数组
str:要分割的字符串
limit:可选,如果为负数,则返回除最后的-limit个元素之外的元素
合并字符串
语法格式:sting implode(string seperator, array pieces)
参数说明:
seperator:指定的分隔符
pieces:指定要合并的数组
第六章 正则表达式
介绍
在新技术层出不穷的今天,让人难忘的、能称得上是伟大的技术寥寥无几,但是其中一定会有正则表达式。然而最容易让人忽略的也是正则表达式。
一方面几乎所有的编程语言和文本编辑工具都支持正则表达式;另一方面,关于正则表达式的书籍、资料很少。
定义
正则表达式是一种描述字符串结构的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。区分大小写
行定位符(^和$)
作用:用于描述字串的边界
^tm //匹配以tm开头的字串
tm$ //匹配以tm结尾的字串
tm //匹配存在tm的字串
单词定界符(\b、\B)
作用:匹配单词
\btm\b //匹配字串中单词tm
\Btm\B //匹配字串tm,且tm不是单词
忽略大小写([ ])
注意:一个[]只能匹配一个字符
选择字符(|)
T|tM|m //以T或者t开头,后跟一个M或m
TM|tm|Tm|tM //TM或tm或Tm或tM
连字符(-)
[a-zA-Z] //表示任意一个字母
排除字符([^])
[^a-zA-Z] //表示不是字母
限定符(?*+{n,m})
限定符 说明 举例
----------------------------------------------------------
? 匹配前面的字符0或1次 colo?r可以表示为color和colr
+ 匹配前面的字符一次或多次
* 匹配前面的字符0次或多次
{n} 匹配前面的字符n次
{n,} 匹配前面的字符至少n次
{n,m} 匹配前面的字符最少n次,最多m次
点号字符(.)
可以替换除了换行符的任意一个字符
转义字符(\)
作用:跟在\后的字符将会失去意义或失去特殊意义
反斜线(\)
除了做转义字符以外,反斜线还有一些别的用处
- 表示一些不可打印的字符
- 指定预定义字符集
- 定义断言
括号字符(())
作用:
1.改变限定符的作用范围。
(thir|four)th //表示thirth或fourth
2.分组
([0-9][a-z]){3} //([0-9][a-z])重复3次
PCRE兼容正则表达式函数(7个)
1.preg_grep()函数
语法格式:array preg_grep(string pattern, array input)
作用:input数组一一匹配pattern,返回满足的元素组成数组
2.preg_match()函数
语法格式:int preg_match(string pattern, string subject[, array matches])
作用:在字符串subject中查找匹配pattern,找到则保存到数组matches并停止查找,返回值为匹配次数0或1
3.preg_match_all()函数
语法格式:int preg_match_all(string pattern, string subject, array matches)
作用:上同
4.preg_quote()函数
语法格式:string preg_quote(string str[, string delimiter])
作用:对str中的特殊字符进行自动转义,如果存在delimiter,则也将delimiter中的字符也进行转义
5.preg_replace()函数
语法格式:mixed preg_replace(mixed pattern, mixed replacement, mixed subject[, int limit])
作用:在subject中匹配pattern,用replacement替换,limit限制最多匹配次数
6.preg_replace_callback()函数
与上一个功能相同
7.preg_split()函数
语法格式:array preg_splite(string pattern, string str[, int limit])
作用:str匹配pattern进行分割字符串,最多limit次,结果保存到一个数组并返回
第七章 PHP数组
声明数组
$array=array("html","css"); //声明下标数组
$array=array("a"=>"html","b"=>"css"); //关联数组
print_r(mixed expression)输出数组
print_r($array);
遍历数组
foreach($array as $val){
//中间代码
}
数组元素的个数count(mixed arrat)
array_pop()
语法格式:mixed array_pop(array array)
作用:获得数组的最后一个元素
array_push(array array, mixed var)
语法格式:int array_push(array array, mixed var)
作用:将传入的变量压入数组的末尾,返回新数组的长度
array_unique()函数
语法格式:array array_unique(array array)
作用:删除数组中的重复元素
第八章 PHP与web页面交互
第九章 PHP与JavaScript交互
第十章 日期时间
第十一章 Cookie与Session
第十二章 图形图像处理技术
第十三章 文件系统
第十四章 面向对象
成员方法和函数的区别
函数是为了实现某一个特定功能,成员方法是类的一个行为
类常量
声明:const name; //name中不用加$
访问:可以不用实例化对象访问,类名::常量名
构造方法
声明:function __construct([mixed])
作用:初始化对象
注意:是两个_
析构函数
声明:function __destruct()
作用:销毁对象
注意:是两个_
继承
子类将会继承父类的方法属性,和构造方法。如果子类有构造方法则调用子类的构造方法,否则调用父类的构造方法。
多态
- 覆盖
- 重载
操作符::
使用方式: 关键字::变量名/常量名/方法名
这里关键字分为以下3种情况:
1. parent:调用父类中的成员变量、成员方法和常量
2. self:调用当前类的成员变量、成员方法和常量
3. 类名:调用本类的变量、方法和常量
在静态方法中,只能调用静态变量,不能调用普通变量;而普通方法可以调用静态变量和方法/red>
final关键字
修饰类 类不能被继承
方法 方法不能被重写或覆盖
抽象类
abstract,不能实例化,至少包含一个抽象方法
抽象方法声明:abstract function name();
接口的使用
不要用public以外的关键字来修改接口的类成员
__clone()
作用:在克隆对象的过程时,调用__clone()方法,可以使克隆出来的对象保持自己的一些方法及属性。
==和===
== 比较的是内容
=== 比较的是地址
对象类型检测
语法格式: ObjectName instanceof ClassName
作用:检测ObjectName是否为ClassName的对象
魔术方法
_ _set()和get()
当程序试图写入一个不存在或不可兼得成员变量时,php将会调用__set()方法
当程序调用一个未定义或不可见的成员变量时,php将会调用__get()方法
_ _call()方法
作用:当程序试图调用不存在或不可见的成员方法时,php将会调用__call()方法
_ _sleep()方法
作用:关闭对象可能具有的类似数据库连接等善后工作,其在调用serialize()方法时被执行。
_ _wakeup()方法
作用:恢复在序列化中可能丢失的数据库连接及相关工作,在调用unserialize()方法时执行
_ _toString()方法
作用:在使用echo或print输出对象时,将对象转化为字符串。
如果没有__toString()方法而直接输出对象,将会发生致命错误!
_ _autoload()方法
作用:解决多次使用include_one()函数引入类
第十五章 PHP加密技术
主要介绍
- crypt() 函数
- md5() 函数
- sha1()函数
crypt()函数
语法格式:string crypt(string str)
作用:单向加密字符串str
md5()函数
语法格式:string md5(string str)
作用:把任意长度的字节串变换成一定长的大整数
注意是字节串而不是字符串
sha1()函数
语法格式:string sha1(string str)
第十六章 MySQL数据库基础
第十七章 PHPmyadmin图形化管理工具
第十八章 PHP操作MySQL数据库
PHP访问MySQL数据库的一般步骤
- 连接MySQL服务器
- 选择MySQL数据库
- 执行sql语句
- 关闭结果集
使用mysql_connect()函数连接MySQL服务器
语法格式:mysql_connect('hostname','username','password')
参数解释:
hostname:MySQL服务器的主机名
username:MySQL用户名
password:MySQL密码
使用mysql_select_db()函数选择数据库文件
语法格式:mysql_select_db(string dbname) //dbname为数据库名
使用mysql_query()函数执行sql语句
语法格式:mysql_query(string sql); //sql为SQL语句
注意:SQL语句不应以分号结尾
使用mysql_fetch_array()函数从数组结果集中获取信息
语法格式:array mysql_fetch_array(resource result)
例子:
$sql=mysql_query("select * from tb_books");
$inf=mysql_fetch_array($sql);
do{
echo $inf[id];
}while($inf=mysql_fetch_array($sql));
注意:本函数返回的字段名区分大小写
使用mysql_fetch_object函数从结果集中获取一行作为对象
语法格式:object mysql_fetch_object(resource result)
用法与上基本相同,只是函数返回的是一个对象,所以访问方式不同。
$inf->id;
使用mysql_fetch_row()函数逐行获取结果集中的每条记录
语法格式:array mysql_fetch_row(resource result)
与 上上 个使用方式基本相同
使用mysql_num_rows()函数获取查询结果集中的记录数
语法格式:int mysql_rows(resource result)
例子:
$num=mysql_num_rows($sql);
第十九章 PDO
介绍PDO
PDO(PHP Data Object ,PHP数据对象),有了PDO,用户不必再使用mysql_*函数、oci_*函数或者mysql_*函数,也不必再将它们封装到数据库操作类,
只要使用PDO接口中的方法就可以对不同的数据库进行操作,在选择不同的数据库时,只需要修改PDO的DSN(数据源名称)即可。
PDO构造函数
语法格式:__construct(string $dsn[, string $username[, string $password]])
参数解释:
dsn:数据源名称,包括主机名端口号和数据库名称
username:连接数据库的用户名
password:连接数据库的密码
例子:
$dns="mysql:host=localhost;dbname=zcw";
$username="zcw"
$password="***"
try{
$pdo=new PDO($dsn,$username,$password);
echo "pdo连接MySQL成功!";
}cache(Exception $e){
echo $e->getMessage();
}
PDO中执行SQL语句
exec()方法
语法格式:int PDO::exec(string statement)
作用:
statement是要执行的SQL语句
该函数返回的是影响的行数
通常用于INSERT、DELETE、UPDATE
query()方法
语法格式:PDOStatement PDO::query(string statement)
作用:
返回执行查询后的结果集
预处理语句–prepare()和execute()方法
语法格式:PDOStatement PDO::prepare(string statement)
bool PDOStatement::execute()
作用:通过prepare()方法做查询的准备工作,然后,通过execute()方法执行查询
PDO中获取结果集
fetch()方法
语法格式:mixed PDOStatement::fetch()
作用:获取结果集中的下一行数据
例子:
$result=$pdo->prepare($query);
$result->execute();
while($res=$result->fetch(PDO::FETCH_ASSOC)){
echo $res['id'];
}
fetchAll()方法
语法格式:array PDOStatement::fetchAll()
作用:获取结果集中的所有行
例子:
$result=$pdo->prepare($query);
$result->execute();
$res=$result->fetchAll(PDO::FETCH_ASSOC);
for($i=0;i<count($res);$i++){
echo $res[$i]['id'];
}
fetchColumn()方法
语法格式:string PDOStatement::fetchColumn([int column_number])
作用:获得结果集中下一行指定列的值
例子:
$result=$pdo->prepare($query);
$result->execute();
echo $result->fetchColumn(0)
echo $result->fetchColumn(0)
PDO中事务处理
- 开启事务–beginTransaction()方法
- 提交事务–commit()方法
事务回滚–rollBack()方法
例子: try{ $pdo->beginTransaction(); $result->$pdo->prepare($query); if($result->execute()){ echo "操作成功!"; }else{ echo "操作失败!"; } $pdo->commit(); }catch(PDOException $e){ die("Error!"); $pdo->rollBack(); }