php基础学习笔记
基础概念
php代码标记
在PHP中,有多种标记来区分PHP脚本
ASP标记:<% php代码 %>
短标记:
脚本标记:
标准标记(常用):
ASP、短标记和脚本标记基本已弃用(默认关闭),如果需要使用则在php.ini配置文件中开启
PHP语句分隔符
在PHP中,系统通常以符号 ; 来判断行的结束
标记结束符 ?> 有自带语句结束符的效果,在纯PHP文件中,可以没有标记结束符
注释
// 单行注释
# 单行注释
/**
* 多行注释
/
变量
变量的使用
定义和赋值
$var1; //定义变量var1
$var2 = 1; //定义变量var2,同时赋值
输出变量
echo $var2; //通过var2变量名找到内容1,然后输出
修改变量
$var2 = 2;
删除变量
unset($var2);
变量命名规则:
- 变量名必须以“$”符号开始
- 变量名由字母、数字和下划线构成,但是不能以数字开头
- 允许中文变量(不建议)
预定义变量:
预定义变量是系统提前定义的变量,储存许多需要用到的数据(预定义变量都是数组)
$_GET:获取所有表单以 get 方式提交的数据
$_POST:POST提交的数据都会保存于此
$_REQUEST:GET和POST提交的都会保存
$GLOBALS:PHP中所有的全局变量
$_SERVER:服务器信息
$_SESSION: session会话数据
$_COOKIE: cookie会话数据
$_ENV:环境信息
$_FILES:用户上传的文件信息
可变变量
如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值,只需在变量前面再加一个$符号
$a = 'b';
$b = 'name';
echo $$a; //结果为name
变量传值
变量传值有两种方式:值传递,引用传递
值传递:将变量保存的值传给另一个变量(两个变量没有关系)
引用传递:将变量保存值的内存地址传给另一个变量(两个变量是相同地址,同一个值)
$a = 1;
$b = $a; //值传递
$c = &$a; //引用传递
常量
常量一旦定义,通常数据不可改变(用户级别)
常量在定义时必须赋值
常量定义方式
define('常量名',常量值);
const 常量名 = 值;
常量命令规则:
- 不需要使用“$”符号
- 由字母、数字和下划线组成,不能以数字开头
- 常量名通常以大写字母为主
定义特殊常量:
define('-_-','smile');
//const -_- = 'smile'; //错误!!!
echo constant('-_-'); //输出
系统常量
常用系统常量
PHP_VERSION:PHP版本号
PHP_INT_SIZE:整形占用的字节数
PHP_INT_MAX:整形的最大值
系统魔术常量
魔术常量以双下划线开始+常量名+双下划线结束,值通常会跟着环境变化,但用户无法改变
__DIR__:当前被执行的脚本所在电脑的绝对路径
__FILE__:当前被执行的脚本所在电脑的绝对路径(带脚本文件的名字)
__LINE__:当前所属的行数
__NAMESPACE__:当前所属的命名空间
__CLASS__:当前所属的类
__METHOD__:当前所属的方法
数据类型
PHP是一种弱类型语言,变量本身没有数据类型
数据类型分类
基本数据类型:
整形:int/integer,4字节
浮点型:float/double,8字节
字符串型:string,系统根据实际长度分配
布尔类型:bool/boolean
复合数据类型:
对象类型:object,存放对象
数组类型:array,存储多个数据(一次性)
特殊数据类型:
资源类型:resource,存放资源数据(PHP外部数据,如数据库)
空类型:NULL,只有一个值就是NULL(不能运算)
类型转换
PHP中有自动转换和强制转换这两种方式转换
强制转换规则:在变量之前添加一个(),括号中填写需要强制转换的类型
$a = 'a111';
echo (float)$a; //0 强制转换
以字母开头的字符串为0
以数字开头的字符串,取到有字母为止(不会同时包含两个小数点)
类型判断
通过一组类型判断函数,来判断变量
类型判断函数用法:is_类型(变量名)
$a = 1;
var_dump(is_int($a)); //true
var_dump(is_string($a)); //false
进制转换
PHP有函数可直接进行转换
Decbin():十进制转二进制
Decoct():十进制转八进制
Dechex():十进制转十六进制
Bindec():二进制转十进制
运算符介绍
连接运算符
连接运算是PHP中将多个字符串拼接的一种符号
. :将两个字符串连接到一起
.= :复合运算,将左边内容与右边内容连接起来,然后重新复制给左边变量
位运算符
^:按位异或,两个相同则为0,不同则为1
<<:按位左移,向左移动后,右边补0
>>:按位右移,向右移动后,左边补上符号位内容(正数补0,负数补1)
流程控制-分支结构
if分支
例:
$day = 'sunday';
if($day == 'sunday'){
echo 'go out';
}else{
echo 'work';
}
switch分支
例:
switch($day){
case 'sunday':
echo '1';
break;
case 'work':
echo '2';
break;
default:
echo 'error';
break;
}
流程控制-循环结构
for循环
例:
for($i=1;$i<=10;$i++){
echo $i,'<br/>';
}
while循环
$i = 1;
while($i<=10){
//循环体
echo $i,'<br/>';
$i++; //循环条件变更
}
do-while循环
$i = 1;
do{
//循环内容
//内容中要改变循环条件来结束循环
}while($i<=6);
这些循环的大括号{}在PHP书写到HTML时非常不美观,PHP提供了一种代替机制,使其可以不用书写大括号{}
左大括号{ 使用冒号:代替
右大括号} 使用 end+对应的标记替代(例:for循环就是endfor)
<table border=1>
<?php for($i=1;$i<10;$i++):?>
<tr>
<?php for($j=1;$j<=$i;$j++):?>
<td>
<?php echo $i . '*' . $j . '=' . $i * $j;?>
<td>
<?php endfor?>
<tr>
<?php endfor?>
</table>
文件包含
文件加载原理:
- 在文件加载(include 或者 require)的时候,系统会自动将被包含文件中的代码嵌入到当前文件中
- 被包含文件中的代码的嵌入位置就是对应的include位置
- 在PHP中被包含的文件是单独进行编译的
include和include_once的区别
include:系统编译时碰到一次就会执行一次
include_once:系统编译时碰到多次,也只会执行一次
include 'index.php';
include_once 'index.php'; //前面该文件已包含,这里不再执行
require和include的区别
本质都是包含文件,唯一的区别在于包含不到文件的时候,报错的形式不一样
include 的错误级别比较低,即使包含出错也不会影响下面代码执行
include 'a.php'; //a.php该文件不存在,报错,以下代码继续执行
echo 'hello';
require 的错误级别较高,如果包含出错,下面代码就不再执行
require 'a.php'; //a.php该文件不存在,报错,以下代码不执行
echo 'hello';
函数
函数:函数是一种语法结构,将实现某一个功能的代码块封装到一个结构中,从而实现代码的重复利用
函数定义基本语法:
function 函数名([参数]){
//函数体
//返回值 return 结果;
函数命名
命名规则:由字母、数字和下划线组成,不能以数字开头
命名规范:
驼峰法:除了左边第一个单词外,后面所有单词首字母都大写
下划线法:单词之间通过下划线连接,单词都是小写
函数是在代码执行阶段,碰到函数的时候才会调用,不是在编译阶段。在PHP中函数的调用可以在函数定义之前
game(); //正常调用函数
//定义函数
function game(){
echo 'hello';
}
- 函数形参的默认值
function add($num1 = 1,$num2 = 0){ //形参$num1的默认值为1,执行在add函数内部,不会与外部的$num1变量冲突
echo $num1 - $num2;
}
注意事项:默认值的定义是放在最后面的,不能左边形参有默认值,但是右边没有
引用传值
函数在调用时主动去获取外部数据的内存地址,使其可以改变相应内存地址,这种定义形参的方式叫做引用传值
引用传值基本定义语法:
function 函数名(&形参1){ //形参前加& //函数体 }
在调用时,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量,不能是数据本身(变量才有指向数据的内存地址)
可变函数
当有一个变量所保存的值刚好是一个函数的名字,那么就可以使用变量+()的方式来充当函数名使用
$text = 'game'; function game(){ } $text(); //调用函数
匿名函数
没有名字的函数
基本定义语法:
变量名 = function(){ //函数体 }; //注意要加;号结束
调用函数即调用变量
变量
全局变量
用户普通定义的变量,在函数外部定义
局部变量
在函数内部定义的变量,在PHP中只允许函数内部使用,函数运行结束后所有局部变量都会清空
超全局变量
系统定义的变量,函数内外都可访问
静态变量
在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量(函数运行结束后,静态变量的内存地址不被清空)
常用系统函数
输出函数
print():类似于echo输出提供的内容,本身是一种结构(不是函数),返回1,可以不需要使用括号
print_r():类似于 var_dump,但不会输出数据的类型,只会输出值
时间函数
data():按照指定格式输出对应当前时间戳
time():以指定格式输出当前时间
microtime():获取微秒级别的时间(通常可以用来程序测试)
数学函数
max():比较两个数中较大的值(可传入数组,返回数组中最大的值)
min():比较两个数中较小的值
rand():得到一个随机数,指定区间的随机整数
mt_rand():与rand一样,只是底层结构不同,效率比rand高(建议使用)
round():四舍五入
ceil():向上取整
floor():向下取整
pow():求指定值次方的结果
abs():求绝对值
sqrt():求平方根
有关函数的函数
function_exists():判断指定的函数名是否在内存中存在
function_arg():在自定义函数中去获取指定数值(下标) 对应的参数
function_args():在自定义函数中获取所有的参数(数组)
function_num_args():获取当前自定义函数的传入实参的数量
字符串
字符串定义语法
单引号字符串
双引号字符串
nowdoc 字符串
定义方式:
$str = <<<'边界符' 字符串内容 边界符;
heredoc 字符串
定义方式:
$str = <<<边界符 字符串内容 边界符;
结构化定义字符串变量的规则:
- 上边界符后面不能跟任何内容
- 下边界符必须定格在最左边
- 下边界符后面只能跟分号,不能跟任何内容
字符串转义
转义的含义:在计算机通用协议中,有一些特定的方式定义的字母,系统会特殊处理,通常这种方式都是使用反斜杠+字母的特性
PHP在识别转义字符时就是使用反斜杠+字母的方式
在单引号和双引号中进行转义的区别:
单引号中只能够识别\‘,而双引号中不能识别\‘但其余都能够识别
双引号中能够识别$符号,因此双引号中可以解析变量,而单引号不可以
双引号中变量识别的规则
变量本身就能够与后面的内容区分,这种方式要保证变量的独立性
$a = 'hello'; $str = "abcd $a efg";
使用变量专业标识符(区分),给变量加上一组大括号{}
$a = 'hello'; $str = "abcd{$a}efg";
数组
数组定义语法
在PHP中系统提供多种定义数组的方式:
使用array关键字
$变量 = array(元素1,元素2,元素3);
使用中括号来包裹数据
$变量 = [元素1,元素2,元素3]
隐形定义数组
$变量[] = 值1; //若不提供下标,系统会自动生成 $变量[下标] = 值;
PHP数组特点
可以整数下标或字符串下标
如果数组下标都为整数:索引数组
如果数组下标都为字符串:关联数组
不同下标可以混合存在:混合数组
数组元素的顺序以放入顺序为准,与下标无关
数字下标自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始
特殊下标的自动转换
布尔值:true和false分别转换为1和0
空:NULL转换为空字符串””
PHP中数组元素没有类型限制
PHP中数组没有长度限制
PS:PHP中的数组存储位置是堆区,为当前数组分配一块连续的内存
数组遍历
foreach循环遍历
//索引数组遍历
$arr = array(1,2,3,4,5,6);
foreach($arr as $v){
echo $v
}
//关联数组遍历
foreach($arr as $k => $v){ //=>表示的是key和value的关系
echo $k,$v,'<br/>';
}
for循环遍历
$arr = array(1,2,3,4,5,6);
for($i = 0,$len = count($arr);$i <= $len;$i++){ //优化,每次循环不用再执行count($arr)
echo $arr[$i];
}