1-语法规范
- 行位单位、所以每行要用分号结束
- 变量严格区分大小写,函数名、方法名、类名不区分大小写
2-标签4种
- xml风格
<?php ?>
- script风格
<script language="php"> echo "script"; </script>
- 短格式
<? echo 'php'; ?>
- sap格式 <% echo “php”; %>
3-注释
-
双引号
-
单引号
注意:双引号不能与单引号错位
4-变量
1-变量的定义
变量就是内存中用于临时存储数据的一个内存空间,每一个空间都有一个名子,这个名子就是变量名,变量名的作用是用于引用,通过变量名对变更的操作就是对内存的对应的空间都读写。
语法:$变量名=值
;
- 变量名必须是字符数字下划线开头
- 必须以 $ 开头
- 变量名严格区分大小写
2.-可变变量
A变量值是另一个变量的名,就可以在A变量名前加两个$读取另一个变量的值。
$a = 'b';
$b = 'c';
$$a = 'c';
3-预定义变量 (9种、$_
、$GLOBALS
)
- $_GET 用于接收从前台以get方式传递过来的数据
- $_POST 用于接收从前台以post方式传递过来的数据
- $_REQUEST 包含get与post方式传递的数据
- $_SERVER 记录了客户端与服务器端的相关信息
- $_COOKIE 主要用于记录php会话技术中的保存在客户端的数据
- $_SESSION 主要用于记录php会话技术中的保存在服务器端的数据7.
- $GLOBALS 主要用于记录全局变量
- $_FILES 主要保存用户上传的文件的信息
- $_ENV 主要用于保存php的环境变量
6-变量的删除
- unset(变量名);内存中没有
- 变量名 = null;(变量的值是null,还存在于变量中)
7-常量
常量就是一类特殊的变量,常量也是存储数据的,但是常量一旦定义就不允许更改值,常量本身也不能删除。
const的值读取:constant()
8-魔术常量(6种、__开头)
__FILE__ 当前脚本文件的完整路径名
__LINE__ 当前行号
__DIR__ 当前文件的所在的目录
__FUNCTION__ 获取当前所在的函数名
__METHOD__ 获取当前所在的方法名。形式 类名::方法名
__CLASS___ 获取当前所在的类名
9-数据类型
三大类型:(4+2+2)
- 标量数据类型(int、float、string、bool)
- 复合数据类型 (array、object)
- 特殊数据类型(resource、null)
一. 标量数据类型
-
int
-
float
-
string
-
使用单引号定义的字符串能被转义的字符有\’转义成` \\转义成\
-
单引号中的变量不能被解释为变量的值
-
使用双引号定义的字符串能被转义的字符有\” \ $ \t \n
-
双引号中的变量能被解释为变量的值
-
双引号中的变量有时需使用”{}”括起来,来限定变量
- php中的转义符()
\' 单引号 \" 双引号 \t tab表(制表符) \n 换行 \r 回车 \\ \ \$ $
-
定界符 heredoc 、nowdoc
<?php //heredoc $a = 100; $str =<<<abc sadsad,$a,sad abc; echo $str; //nowdoc $a =100; $str = <<<'AAA' 这里可以是任合内容 我是历的苛夺基$a 本原则叶落归根在运 输费艰难田¥¥&…… AAA; echo $str;
-
-
Boolean
10-复合数据类型
- 数组
- 索引数组 下标是整数
- 关联数组 下标是字符
- object
对象
11-特殊数据类型
- resource
- null
12-数据类型的转换
-
其他数据类型转为整型
-
其他数据类型转为字符串
- 其他数据类型转为布尔型
- 所有0、“”、“0”、null、array()转布尔都为false
13-变量与常量的内存理解
1、内存分区
- 栈区 cpu
- 堆区 存储复合类型的值
- 数据段 简单的值,细分全局区(全局变量、局部变量)和静态区(常量、类常量、静态变量)
- 代码区 (存代码)
14-执行过程
- 编译
- 执行
- 输出
15-函数判断
is_int() 判断是否为整型
is_bool() 判断是否为布尔类型
is_array() 判断是否为数组
is_null(); 判断是否为null
is_object() 判断是否为对象
is_string() 判断是否为字符串
is_scalar(); 判断是否为标量数据类型
- empty();
- 判断一个变量是否为“空”,只要是能够转换为布尔false都是所谓的“空”,返回布尔true。0、0.0、””、’0’、false、null、空数组
- isset();
- null的时候是false
- 主要用于判断是否设置值,如果是null值才返回false
- is_null();
- 只有是null才为true
- 主要用于判断一个变量的值是否为null
16-PHP的输出语句
echo
print_r()
var_dump()
sprint_f()
十四、运算符
值得注意的是,很多人搞不清楚前自增和后自增的区别,
前自增
运行规则:先对变量的值进行加1,再使用变量的值进行运算
后自增
运行规则:先使用变量的值进行运算,再对变量的值进行加1
提示:
无论前自增还是后自增,变量的值都会加1,唯独受影响的是整个式的结果
- 算术运算符
- 前自增
- 后自增
- 前自减
- 后自减
- 字符串运算符
- .
- .=
- 比较运算符
>、<、>=、<=、!=、==、===、!==
- 提示:
- 布尔false
- 等效false的值(0、0.0、””、’0’、null、空数组)
- 如果要严格区分等效于false的其他数据类型值与真的布尔值false,那么请求===
- 逻辑运算符
- &&、||、!、and、or
- 逻辑与短路:有一个为true返回true
- 逻辑或短路:有一个为false返回false
and、or 与 &&、||区别:
and、or的运算优先级低于=
&&、||的运算优先级高于=
- 位运算符
十五、流程控制
一、 分支结构
//单分支
if(exp){
//your code
}
//双分支
if(exp){
//your code
}else{
//default code
}
//多分支
if(expA){
//codeA
}else if(expB){
//codeB
}else if(expC){
//codeC
}else{
//default code
}
switch分支
语法:
switch(变量){
case 值1:
//语句体1
break;
case 值2:
//语句体2
break;
default:
//缺省语句体
}
php中switch的比较属于==比较,js中switch的比较属于===
二、 循环控制
- for循环
for($i=0;$i<10;$i++){
}
- foreach循环
语法1:
foreach(数组 as $v){
//循环体
}
语法2:
foreach(数组 as $k=>$v){
//循环体
}
- while循环
while(exp){
//循环体
}
- do…while循环
do{
//循环体
}while(exp)
一、数组 count($arr)
- 元素
- 下标
- 个数
二、数组的相关操作
- 定义:array()、[]
- 追加
- 删除 usnet();
三、数组的遍历
- 下标连续的
for($i = 0 ;$i<count($arr);$i++){
}
- 下标不连续
foreach(数组 as $k => $v){
//循环体
}
三、数组的分类
- 索引数组-下标是整数
- 关联数组-下标是字符串
- 混合数组
四、关联数组的遍历
怎么把关联二维数组转换成一维数组
public function test1(){
$user = array(
'id'=>1,
'name'=>'zhangsan',
'age'=>19
);
$arr = '';
foreach ($user as $key=>$value ){
$arr .= $value;
}
dump($arr);die;
}
public function test2(){
$arr = [];
$arr[] = 'zhsangsan';
$arr[] = '19';
$arr[] = '1';
dump($arr);die;
}
五、函数
- 函数的定义
function funName(形参列表){
//函数体
【return 值】;
}
- 形参
- 形参主要用于接收从函数外部传递进来的数据
- 形参只对内部可见
- 形参可以具有默认值,如果在调用时没有为具有默认值的形参传递数据,那么在函数内部使用的形参的默认值,否则使用传递进来的数据。
- 具有默认值的形参一般位于形参列表的最后。
- 形参的作用是让函数更性有通用性
- 实参
- 用于向函数内部传递值
- 匿名函数
$showInfo =function(){
}
六、静态变量
- 在函数内部使用static定义的变量就是静态变量
- 静态变量的特性
- 静态变量只会被初始化一次
- 静态变量的值不会随着函数的调用而销毁,仍然在内存,但是不能在函数外部访问。
- 静态变量在其后函数调用时还可以访问,并且保留上一次函数运行时的结果
- 项目中积分的使用问题
七、传值方式
- 赋值传真
- 将变量A的值传递到变量B
- 引用传值
- 将变量A的内存地址传递到变量B
- &地址符
- 用于将赋值传值更改为引用传值。
- 函数的实参地址的传递
- 函数的实参与形参的传值是赋值传值
- 如果想实现函数实参与形参的引用传值,形参前面加&
八、作用域
-
外部作用域
在任何函数外部定义的变量就是全局变量,其作用域就是全局作用域
-
内部作用域
在函数内部定义的变量就是局部变量,其作用域就是局部作用域
-
全局作用域
global关键字
函数内部访问函数外部的变量 -
不受作用域限制
- 常量、
- 预定义的变量:
- $_GET
- $_POST
- $_REQUEST
- $_SERVER
- $_SESSION
- $_COOKIE
- $_ENV
- $_FILES
- $GLOBALS
一、PHP文件引入
- require
- 在引入的文件发生错误(不存在),会直接结束当前循环的执行。
- inlcude
- 在引入的文件发生错误(不存在),会继续其后的代码执行。
- require_once\include_once
- 在引入文件时会先检查被引入的文件之前是否有引入过,如果没有则引入,有就不引入
说明:一般引入的代码有逻辑性的,使用require,include一般用来引入HTML
二、针对调用的函数引入问题
- 同一个脚本内可以先调用函数后定义函数
- 原理:先编译,编译后代码区就有了函数的定义代码,后再调用,正常
- 先调用,后引入,报错(原因是引入的文件是先引入后调用,执行调用时文件还没有定义,所以会报错)
三、PHP常用字符串
-
strlen 字符串的长度
$string = 'http://www.doc.com/index.php/Home/Test/strlen'; echo (strlen($string));
-
strchr 查找search字符串首次出现的位置并截取到最后
strchr($string,'w')
-
strrchr 查找search字符串末次出现的位置并截取到最后
strchr($string,'i')
-
strpos 在str字符串中查询search字符串首次出现的位置(0开始算起)
echo (strpos($string,'w'));
-
strrpos 在str字符串中查询search字符串最后一次出现的位置
echo (strpos($string,'w'));
- stripos、strripos i表示不区分大小写的查询
-
trim
①:trim(str【,substr】) 用于在str字符串两端去除指定的substr字符,如果省略substr,则是去除空格$string = " zhangsan "; echo(trim($string)); $string1 = '22zhangsan22'; echo '<br/>'; echo (trim($string1,'22'));
②:ltrim(str【,substr】) 去除左侧指定的字符或空格
$string2 = '22zhangsan'; echo (ltrim($string2,22));
③:rtrim(str【,substr】) 去除右侧指定的字符或空格
$string2 = 'zhangsan22'; echo (rtrim($string2,22));
-
str_repeat(str,n)
$string2 = 'nice'; echo (str_repeat($string2,3));
-
ucfirst、ucwords 首写单词大写,一句话首单词大写
$string2 = 'nice'; echo (ucfirst($string2)); $string2 = 'nice aweqwe dqwe'; echo (ucwords($string2));
-
strtolower、strtoupper 转换大小写
-
explode(sep,str) 将字符串str,使用sep分隔符进行分割,并以数组的形式返回
$str = "people became quite illogical when they decide"; var_dump(explode(' ',$str));
-
md5( ) 加密,返回32位字符串
-
addslashes()
对于些特殊字符添加反斜杠(\),特殊字符(‘)(“)(\)
- stripslashes( )
- addslashes的逆运算,去除反斜杠
- htmlspecialchars 将html语言中的标签转换成对应的字符实体。
- htmlspecialchars_decode 逆运算
- chr、ord
- ord主要用于获取字符的unicode编码 97
- chr主要用于获取指定编码对应的字符 b
四、数学函数
- max() 获取多个变量或数组中的最大值
- min() 获取多个变量或数组中的最小值
- abs() 获取绝对值
- ceil() 向上取整
- floor() 向下取整
- rand(m,n) 获取m与n之间的随机整数
- mt_rand(m,n); 推荐,获取m与n之间的随机整数
- round(v【,p】); 对变量v保留p位小数(四舍五入),如果省略p表示直接取整
- pow(m,n); 取m的n次方
- sqrt(v); 开平方
五、数组函数
-
count() 数组长度
-
array_keys($arr); 以数组形式返回key值
-
array_values($arr); 以数组形式返回value值
-
in_array( v a l u e ) ; 判 断 数 组 value); 判断数组 value);判断数组arr中存是否有$value值存在
-
array_key_exists( k e y , key, key,arr); 判断数组 a r r 中 存 是 否 有 arr中存是否有 arr中存是否有key键名存在
-
数组添加与删除
- array_pop(); 从尾部删除一个元素
- array_push(); 向数组的尾部追加一个元素
- array_shift(); 从头部删除一个元素
- array_unshift(); 向数组的部部追加一个元素
- array_splice(); 从数组的中间删除指定个数的元素,并以新的元素代替
-
list结构
list(变量列表)= 数组
将数组中的元素的值,依次赋值给list后的变量,要求数组是一个索引数组
-
数组排序
- sort(arr); 对数组进行升序排序
- rsort($arr); 对数组进行降序排序
-
数组合并
- array_merge(arrA, arrA, arrA,….);
-
数组指针相关的函数
-
each(); 用于获取当前数组指针所指向的元素,并返回一个混合数组,并将指针下移。
-
key(); 用于获取当前数组指针所指向元素键名
-
current(); 用于获取当前数组指针所指向元素的键值
-
next(); 将指针下移
-
prev(); 将指针上移
-
end(); 将指针指向最后一个元素
-
reset(); 重置指针(回到第一个元素)
<?php
$arr =[
'id'=>2,
'brand' => 'apple',
'price'=> 16
];
//用于获取当前数组指针所指向的元素,并返回一个混合数组,并将指针下移。
var_dump(each($arr));
var_dump(key($arr)) ;
var_dump(current($arr)) ;
var_dump(next($arr)) ;
var_dump(prev($arr)) ;
var_dump(end($arr)) ;
var_dump(reset($arr)) ;
输出结果
array(4) {
[1]=>
int(2)
["value"]=>
int(2)
[0]=>
string(2) "id"
["key"]=>
string(2) "id"
}
string(5) "brand"
string(5) "apple"
int(16)
string(5) "apple"
int(16)
int(2)
示例2:使用each遍历数组
<?php
$arr =[
'id'=>2,
'brand' => 'apple',
'price'=> 16
];
while($data = each($arr)){
echo $data['value'],'<br/>';
}