PHP基础


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);

变量命名规则:

  1. 变量名必须以“$”符号开始
  2. 变量名由字母、数字和下划线构成,但是不能以数字开头
  3. 允许中文变量(不建议)

预定义变量:

预定义变量是系统提前定义的变量,储存许多需要用到的数据(预定义变量都是数组)

$_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 常量名 =;

常量命令规则:

  1. 不需要使用“$”符号
  2. 由字母、数字和下划线组成,不能以数字开头
  3. 常量名通常以大写字母为主

定义特殊常量:

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>

文件包含

文件加载原理:

  1. 在文件加载(include 或者 require)的时候,系统会自动将被包含文件中的代码嵌入到当前文件中
  2. 被包含文件中的代码的嵌入位置就是对应的include位置
  3. 在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';           

函数

  1. 函数:函数是一种语法结构,将实现某一个功能的代码块封装到一个结构中,从而实现代码的重复利用

  2. 函数定义基本语法:

function 函数名([参数]){
	//函数体
	//返回值    return 结果;
  1. 函数命名

    命名规则:由字母、数字和下划线组成,不能以数字开头

    命名规范:

    ​ 驼峰法:除了左边第一个单词外,后面所有单词首字母都大写

    ​ 下划线法:单词之间通过下划线连接,单词都是小写

  2. 函数是在代码执行阶段,碰到函数的时候才会调用,不是在编译阶段。在PHP中函数的调用可以在函数定义之前

game();        //正常调用函数
//定义函数
function game(){
	echo 'hello';
}
  1. 函数形参的默认值
function add($num1 = 1,$num2 = 0){  //形参$num1的默认值为1,执行在add函数内部,不会与外部的$num1变量冲突
	echo $num1 - $num2;
}

注意事项:默认值的定义是放在最后面的,不能左边形参有默认值,但是右边没有

  1. 引用传值

    函数在调用时主动去获取外部数据的内存地址,使其可以改变相应内存地址,这种定义形参的方式叫做引用传值

    引用传值基本定义语法:

    function 函数名(&形参1){          //形参前加&
    	//函数体
    }

    在调用时,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量,不能是数据本身(变量才有指向数据的内存地址)

  2. 可变函数

    当有一个变量所保存的值刚好是一个函数的名字,那么就可以使用变量+()的方式来充当函数名使用

    $text = 'game';
    function game(){
    
    }
    $text();         //调用函数
  3. 匿名函数

    没有名字的函数

    基本定义语法:

    变量名 = function(){
    	//函数体
    };  //注意要加;号结束

    调用函数即调用变量

变量

  1. 全局变量

    用户普通定义的变量,在函数外部定义

  2. 局部变量

    在函数内部定义的变量,在PHP中只允许函数内部使用,函数运行结束后所有局部变量都会清空

  3. 超全局变量

    系统定义的变量,函数内外都可访问

  4. 静态变量

    在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量(函数运行结束后,静态变量的内存地址不被清空)

常用系统函数

  1. 输出函数

    print():类似于echo输出提供的内容,本身是一种结构(不是函数),返回1,可以不需要使用括号

    print_r():类似于 var_dump,但不会输出数据的类型,只会输出值

  2. 时间函数

    data():按照指定格式输出对应当前时间戳

    time():以指定格式输出当前时间

    microtime():获取微秒级别的时间(通常可以用来程序测试)

  3. 数学函数

    max():比较两个数中较大的值(可传入数组,返回数组中最大的值)

    min():比较两个数中较小的值

    rand():得到一个随机数,指定区间的随机整数

    mt_rand():与rand一样,只是底层结构不同,效率比rand高(建议使用)

    round():四舍五入

    ceil():向上取整

    floor():向下取整

    pow():求指定值次方的结果

    abs():求绝对值

    sqrt():求平方根

  4. 有关函数的函数

    function_exists():判断指定的函数名是否在内存中存在

    function_arg():在自定义函数中去获取指定数值(下标) 对应的参数

    function_args():在自定义函数中获取所有的参数(数组)

    function_num_args():获取当前自定义函数的传入实参的数量

字符串

字符串定义语法

  1. 单引号字符串

  2. 双引号字符串

  3. nowdoc 字符串

    定义方式:

    $str = <<<'边界符'
    	字符串内容
    边界符;
  4. heredoc 字符串

    定义方式:

    $str = <<<边界符
    	字符串内容
    边界符;

结构化定义字符串变量的规则:

  • 上边界符后面不能跟任何内容
  • 下边界符必须定格在最左边
  • 下边界符后面只能跟分号,不能跟任何内容

字符串转义

转义的含义:在计算机通用协议中,有一些特定的方式定义的字母,系统会特殊处理,通常这种方式都是使用反斜杠+字母的特性

PHP在识别转义字符时就是使用反斜杠+字母的方式

在单引号和双引号中进行转义的区别:

  1. 单引号中只能够识别\‘,而双引号中不能识别\‘但其余都能够识别

  2. 双引号中能够识别$符号,因此双引号中可以解析变量,而单引号不可以

    双引号中变量识别的规则

    • 变量本身就能够与后面的内容区分,这种方式要保证变量的独立性

      $a = 'hello';
      $str = "abcd $a efg";
    • 使用变量专业标识符(区分),给变量加上一组大括号{}

      $a = 'hello';
      $str = "abcd{$a}efg";

数组

数组定义语法

在PHP中系统提供多种定义数组的方式:

  1. 使用array关键字

    $变量 = array(元素1,元素2,元素3);
  2. 使用中括号来包裹数据

    $变量 = [元素1,元素2,元素3]
  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];
}

文章作者: BananaYH
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BananaYH !
评论
  目录