PHP入门——基本巩固
----------一、变量
----------二、运算
----------三、控制结构
----------四、函数
----------六、字符串
----------七、数组
----------八、全局变量与常量
----------九、文件管理入门
一、变量
①类型
整形、浮点型、字符串、布尔型、数组、对象、null、资源
gettype(); 获取类型
is_类型名(); 返回布尔型; 例如 is_string('aaa');
②变量检测
isset(); 变量检测是否存在,返回布尔型, null是false;
empty(); 判断是否为空,"空字符串、0、null"都为空;
③、打印调试
echo 打印字符串方便
print_r 打印数组方便
var_dump 打印变量类型及齐值
④、类型转换
settype($var,type); 把变量$var类型转为type;
$字符串*1 or $字符串+0 使字符串转为整形;
$整形 . " 整形拼接空字符串 使整形转为字符串
⑤、赋值
= 赋值: $a=1; $b=2; $a=$b;
& 引用赋值: $a=&$b;此时$a与$b关联,动一个引动另一个;
⑥、变量销毁
unset(); 清除变量
⑦动态变量名
$$变量名; 例如:$a='liu'; $$a='baba'; 此时$$a等同于$liu;
二、运算
①运算符
+ - * / % 加 减 乘 除 取余;
②比较运算符 结果只有:true/false;
> , < , == , === , != , !== 大于 , 小于 , 等于 , 全等于 , 不等于 , 绝对不等于;
注: 如果值可能包含0,空字符串,为了正确比较,使用全等于 === 因为0是false;
③三元运算符
判断 ? 值1 : 值2;
用法: $a=1; $b=5; $c=($a>$b?$a:$b); 判断$a是否大于$b,ture给$c赋值$a,false给$c赋值$b;
④逻辑运算符
&& 并且 只要有一个假的,最终结果为假;
|| 或 只要有一个真的,最终结果为真;
注:逻辑运算符有齐短路特性
⑤递增递减
++; 递增
--; 递减
$a=1; $b=$a++; 结果$b=1;$a=2; 先给$b赋值,然后对$a递增操作;
$a=1; $b=++$a; 结果$a=2;$b=2; 先递增运算,然后赋值;
⑥字符串运算
. 拼接字符串 , 英文符号的句号;
注:echo $a,$b; 比 echo $a.$b; 要快,因为拼接字符串需要运算;
⑦位运算符
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b Or(按位或) 将把 $a 和 $b 中任何一个为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。
~ $a Not(按位取反) 将 $a 中为 0 的位设为 1,反之亦然。
$a << $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
三、控制结构
①赋值
= 一个等于号;
②switch case 分支语句
1 switch (表达式){ 2 case 值1: 3 执行: 4 break; 5 case 值2: 6 执行: 7 break; 8 default: 9 没有匹配项执行: 10 }
③while 循环
while(条件){执行}; 在条件范围内一直执行;
④for循环
初始条件a ; 判断条件b ; 执行体c ; 状态改变d;
1 for(a;b;d){ 2 c; 3 }
⑤break与continue
break 破坏循环、破坏执行;
continue 跳过本次循环,继续执行之后的(单词有''延期/继续''的意思);
四、函数
一段封装好的代码,随时可以调用;
①函数定义 格式
function 函数名(参数){ 执行语句; return; }
命名不区分大小写
②函数执行与返回流程
函数调用时,代码执行权进入函数;
当函数所有语句执行完毕或'return',函数返回,交出执行权;
注:return只能返回一个值;
③函数参数传递方式
1 function t($a){ //此处$a是形参,与外界无关 2 $a += 1; //这个$a如何变化与外界 3 } 4 $a=3; 5 t($a); 6 echo $a; //$a还是3;
1 1 function t(&$a){ //此时形参$a指向外部的$a 2 2 $a += 1; //函数内的$a改变会影响外部 3 3 } 4 4 $a=3; 5 5 t($a); 6 6 echo $a; //$a输出4; 该方法不推荐,会影响函数外
④作用域
在PHP页面中的变量是全局变量,在函数内部的变量是局部变量
要在函数中声明全局变量: global $变量;
⑤动态调用函数
使变量的值作为函数名,用变量调用函数;
1 function abc(){ 2 echo "hello"; 3 } 4 $a = 'abc'; 5 $a(); //此时 $a(); 等同于 abc(); 因为$a => abc , 所以 $a(); => abc();
⑥时间戳函数
时间戳:1970-1-1 00:00:00 到现在所经过的秒数
time(); 返回秒数;
microtime(); 返回: 毫秒数 与 秒数;
microtime(ture); 只返回毫秒数;
⑦时间戳格式化
date();
Y-年;m-月;d-日; w-周,返回0-6; N-周,返回1-7(PHP5.1以上);
h-时;i-分;s-秒; h:12时制;H:24时制;
⑧日期解析
mktime(); 把日期转成时间戳 ( h,i,s,m,d,Y );
strtotime(); strtotime('now');返回现在时间戳 strotime('-1day');返回过去一天的时间戳;
⑨检测日期
checkdate(); 检测日期是否合法 checkdate(2,29,2001);返回false
五、字符串
①定义方式
$str='string'; 定义一段字符串
定义大段文本<<<定界符,标记必须大写,结束标记必须单独占用一行且以 ; 号结束
1 $a=<<<EOF 2 <html> 3 </html> 4 EOF;
②单双引号的区别
' ' 单引号时 \' \\ \n \t 反斜杠将转义特殊字符; 同时单引号不能解析变量;
" " 双引号时 \" \\ 将被转义,但\n \t不能被转义; 同时双引号能解析变量;
单引号速度比双引号快
③字符串常用函数
长度、位置、替换、截取、拆分、转义、反转
——长度函数
strlen(); 返回整形;中文每字为3字节;
mb_strlen(); 返回字数/utf-8 中文为一个字节,需扩展支持 mb_strlen('汉字','utf-8');
——查位置
strop($a,$b); 查询$b在$a中的位置,如果结果为0时将返回null,所以使用判断 if( storp($a,$b) !== false)
stripos($a,$b); 查询第一次出现的位置
strrpos($a,$b); 查询最后一次出现位置
——替换
str_replace($a,$b,$str); 把$str中的$a替换为$b
strr(); 替换一批字符串,利用数组 ( $str , array( $a=>$b , $c=>$d ) )把$a替换为$b,$c替换为$d
——截取
substr($str,a,len); 把字符串$str从a开始截取长度len
——拆分字符串
number_format(); 以千分位分割数字;必须是纯数字;
chunk_split(str,int,'end'); 把字符串str以每int个分割开,并且用 'end' 分隔符 返回字符串string
explode('end',str); 把字符串根据 ''end'' 字符分割 返回数组
str_split(str,int); 把字符串str以每int个分割 返回数组
implode('end',array); 把array以'end'字符粘合 返回字符串
——转义
addslashes(str); 对字符串中的 ' \ 进行转义,在此类符号前面添加一个反斜杠 \
stripslashes(str); 去除字符串中的反斜杠,如果有两个\\挨着,去除第一个;
get_magic_quotes_gpc(); 返回magic_quotes_gpc是否开启,开启时如果包含post、get、cookie等增加 \ 转义,确保不会产生特殊字符引起的污染
( !get_magic_quotes_gpc() )?addslashes($str):$str 判断没开启转义,开启不进行转义
注: php5.4版本以上 始终返回false,该方法移除了,所以不要依赖此设置;
htmlspecialchars(); 把字符串转成html实体;例如<>转成< 与>
htmlspecialchars_decode(); 把<:转成<
htmlentities() 把字符串中所有可转换字符转为html实体
html_entity_decode(); htmlentities()的反函数;
——反转
strrev(); 反转字符串
④字符串比较
strtmp($str1,$str2); 返回整形,0为相等,负数为1比2少,正数为1比2多
⑤转换
strtolower(); 字符串转小写;
strtoupper(); 字符串转大写;
ucfirst(); 字符串第一个转大写;
ucwords(); 将每个单词首字母大写;
⑥移除
ltrim($str,st); 从字符串$str中删除开头的st
六、数组
数组的每个值都有键key与值value属性
索引数组,key是数字;
关联数组,key是字符串;
①声明方式
array( key1=>value1 , key2=>value2 );
多维数组:
array( key1=>value1 , key2=>array( key1=>value1 , key2=>value2 ) , key3=>value3 );
注:如果键key重复,则后边覆盖前面的
②操作数组单元
$arr[]=' ' 在数组后面增加1个单元;
$arr[ i ] 取出键key为i的值;
$arr[ i ][ j ] 取出多维数组的值
unset( $arr[ i ] ); 删除键key为i的值;
array_unshift(); 从数组开始插入值,并使key向后排;
③遍历数组
——索引数组取值
for( $i=0;$i<count($array); $i++ ){}
——关联数组取值
foreach( $array as $key=> $value ){} as一个时只取值
④游标操作
current() 当前游标指向的数组
next() 把游标向后移动一位
end() 把游标移动到最后一位
resset() 复位
prev() 游标向前移动
⑤数组常用函数
count() 计算数组中的单元数目
aray_key_exists( key,array ) 检查给定的键是否存在于数组
in_array() 检查数组中是否存在某个值
array_change_key_case( array,case ) 返回字符串键名全为大写或全为小写的字符串case有两个值:case_upper , case_lower .
注:如果返回的键名重复,后面的会覆盖前面的,如,keY和KEY;
array_count_valus(); 统计所有值出现的次数,并以被统计数组的值作为键名返回一个数组
array_fil( a,num,value ); 用value对数组填充num个项目,填充的起始序列为a
array_filter( array,callback ); 用回调函数过滤数组的单元,例如通过函数对array只取偶数
array_push( array,value); 想数组末尾添加一个或多个值(入栈)
array_pop( array ); 弹出单元,从末尾开始,并使数组长度减一(出栈) 使用此函数会重置(reset())array指针
array_unshift(); 向数组头部添加单元,并重新排序key
array_column( array,column,index ); 从多维数组中返回指定数组的一列; 从多维数组中找到column列,并以index为键名返回数组
array_unique( array ); 返回数组中去重后的新数组,值重复时只返回第一个键及其值
sort( array,flags ); 对数组进行排序,flags排序类标记:SORT_NUMBER作为数字比较/SORT_STRING字符串/SORT_FLAG_CASE不区分大小写
usort( array,callback ); 使用用户自定义的函数对数组进行排序
asort(); 对数组排序并保持索引关系
ksort(); 对数组按键名排序
natsort(); 用“自然排序”算法对数组排序,(数字排序按首位数)
natcasesort(); 用“自然排序”算法对数组进行不区分大小写字母的排序
array_merge(); 合并一个或多个数组
array_merge_recursive(); 递归地合并一个或多个数组
array_diff( arr1,arr2 ); 返回数组中不一样值得集合
array_intersect( arr1,arr2 ); 返回数组中一样值得集合
array_intersect( arr1,arr2 ); 带索引检查计算数组的交集
array_flip(); 把数组中的键和值进行交换
arrat_reverse( array,true ); 对数组的单元进行相反排序,key为数字时不保留原有key,非数字时保留,设置true时保留数字key
array_sum(); 计算数组中所有值的和;返回int或float
shuffle(); 洗牌,随机打乱数组的单元排序,调用该方法时数组内部排序就被打乱,
range( low,high,step ); 建立一个包含指定范围单元的数组,范围为以low开始,以high结束,以step为进步,step设置为2就每次跳两个
array_rand( array,int ); 从数组中随机取出一个或多个单元
八、全局变量与常量
①全局变量
$_GET 表单GET方式发送的值;地址栏上获得的值
$_POST 表单POST方式发送的值
$_REQUEST 默认下包括了GET、POST、COOKIE的值
$_SESSION 存储用户'会话'的信息变量,把信息存储到会话之前必须先启动会话 session_start(); 函数必须位于<html>标签之前
为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
$_COOKIE 用于取回 cookie 的值。setcookie() 函数必须位于 <html> 标签之前。
cookie是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。
$_FILES 用户上传文件信息、数组
$_GLOBALS 对全局变量的花名册,通过该变量任意访问全局变量
$_ENV 服务器操作系统的环境变量
$_SERVER 获取网站域名,当前访问的脚本,来访者ip等
②常量
意义:声明常量后不能被修改
define( name,value );
命名规则与变量一样,但习惯上全大写以区别变量;
常量名前不加$符号,不能销毁,不能修改,全局有效
defined() 检测常量是否存在
constant(); 返回常量的值
③动态常量名
意义,用变量的值做常量的名;
1 define('PI',3.14159); 2 $pai='PI'; 3 $a=constant('PI'); 4 $b=constant($pai); 5 echo $a; 6 echo $b; 7 //输出$a和$b的值都为3.14159;
九、文件管理案例
①文件包含
include( 'url' ); 包含并运行指定文件
include_once(); 只引入一次,如果引入过不再引入
require(); 如果引入不存在,防止执行,将导致脚本中止
require_once(); 与include_once()等同功能
②进制与位运算
10进制 echo 123; 正常数字
8进制 echo 0123; 在数字前面加个0; 数字0;
16进制 echo 0x123; 在数字前面加0x;数字0和字母x;
2进制 PHP目前不支持表示二进制
位运算 &且 |或 对每个位上的逻辑运算
位运算先把数字转成二进制,然后对每位数比较返回数字,例如
1 // 5 0000 0101 2 // 12 0000 1100 3 // & 0000 0100 转成10进制是4 4 // | 0000 1101 转成10进制是13 5 echo 5&12,5|12; 6 //结果为4和13;转成二进制,然后比较每一位数返回值,然后转成10进制;
③PHP错误报告设置
PHP脚本错误等级 如:致命错误、NOTICE、WARNING、N等;
error_reporting(0); 不报告所有错误;
error_reporting( E_ALL ^ E_NOTICE ) 报告所有但除了NOTICE级错误
④浮点数不精确
因为一些小数再转成2进制要无限循环,损失精度;
⑤逻辑运算的短路特性
&& 并且 如果遇到第一个为假的条件,之后的不再运算
|| 或者 只要遇到一个为真的条件,就继续执行后面的
应用实例:
1 //if(!defined('PI')){ 2 // define('PI',3.14159); 3 //} 4 //echo constant('PI'); 5 //利用短路特性将上面代码简写为下面代码 6 defined('PI')||define('PI',3.1415); 7 echo constant('PI');
⑥文件管理
opendir( 'URL' ) 打开一个URL的目录dir
closedir( 'dir' ) 关闭指定的dir目录
rewinddir( 'dir' ) 倒回目录句柄,将dir指定的目录流重置到目录的开头。
readdir( dir ) 返回打开的dir目录中下一个文件的文件名。文件名以在文件系统中的排序返回。可以使用while循环出,如下代码
1 $words = opendir('./'); 2 if ($words===false){ 3 exit('没有该文档');//输出一个消息并退出脚本 4 } 5 $arr= array(); 6 while( ($i=readdir($words)) !== false){ 7 $arr[]=$i; 8 } 9 var_dump($arr); 10 closedir($words);
输出: