环境搭建
直接用的phpstudy,省心省力。
写代码用的是editplus;出现了中文乱码的问题,解决方法如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CtzSU4Ut-1657783674641)(C:\Users\18084\Desktop\fh\f3e839f083f243cd844c93123fc3f35b.png)]
改为UTF-8
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NCP6pqnk-1657783674644)(C:\Users\18084\Desktop\fh\a2c3450146474d5f886f562fa951275f.png)]
工具–首选项–文件–默认文本编码也改为UTF-8
PHP基础
php标记
//ASP标记:
<% php代码 %>
//短标记
<? Php 代码 ?>
//脚本标记
<script language="php">
php代码
</script>
//标准标记(常用)
<?php php代码 ?>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ixMQsQEi-1657783674644)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
php注释
行注释: //
#:与//一样
块注释: /* */
php大小写敏感
在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感;
但对变量敏感。
PHP 变量
PHP 变量规则:
- 在PHP中不需要任何关键字定义变量(赋值)
- 变量以 $ 符号开头,其后是变量的名称
- 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
- 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
//定义变量
$var1;
$var2 = 1;
//访问变量
echo $var2;
//修改变量
$var2 = 2;
//删除变量:使用unset(变量名)
unset($var2);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygbfPxp4-1657783674645)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
PHP 预定义变量 - 超全局变量
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。(预定义变量都是数组)
这些超全局变量是:
$_GET:获取所有表单以get方式提交的数据
$_POST: POST提交的数据都会保存在此
$_REQUEST: GET和 POST提交的都会保存
$GLOBALS:PHP中所有的全局变量
$_SERVER:服务器信息
$_SESSION: session会话数据
$_cOOKIE: cookie会话数据
$_ENV:环境信息,
$_FILES:用户上传的文件信息
可变变量:
如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值:在变量前面再多加一个$符号。
<?php
$a = 'b';
$b = 'aa';
echo $$a;//输出aa
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ydHlWDUO-1657783674645)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
变量传值
将一个变量赋值给另外一个变量:变量传值
值传递:将变量保存的值赋值一份,然后将新的值给另外一个变量保存(两个变量没有关系)
//值传递
$a = 1;
$b = $a;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6TYKyCiR-1657783674645)(C:\Users\18084\AppData\Roaming\Typora\typora-user-images\image-20220703180019026.png)]
引用传递:将变量保存的值所在的内存地址,传递给另外一个变量:两个变量指向同一块内存空间(两个变量是同一个值)
//引用传递
$b = &$a
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLLaQhqt-1657783674646)(C:\Users\18084\AppData\Roaming\Typora\typora-user-images\image-20220703180220349.png)]
内存分区
在内存中,通常有以下几个分区:
栈区:程序可以操作的内存部分(不存数据,运行程序代码),少但是快
代码段:存储程序的内存部分(不执行〉
数据段:存储普通数据(全局区和静态区)
堆区:存储复杂数据,大但是效率低
PHP 常量
常量类似变量,但是常量一旦被定义就无法更改或撤销定义。
在PHP中常量有两种定义方式(5.3之后才有两种)
1、使用定义常量的函数: define(‘常量名’,常量值)(可选的第三个参数规定常量名是否对大小写敏感。默认是 false。)
2、5.3之后才有的: const 常量名=值;
<?php
define("-_-", "3.1415926");
const Pi = 3.14;
echo constant('-_-');
echo Pi;
?>
注:
- 常量名第一个字母一般大写;
- 常量命名的规则比变量要松散,可以使用一些特殊字符,该方式只能使用define定义;输出特殊常量名要用constant(‘常量名’);
- Define和const定义的常量是有区别:在于访问权限区别。
系统常量:
系统帮助用户定义的常量,用户可以直接使用
常用系统常量
常用的几个系统常量:
PHP_VERSION: PHP版本号
PHP_INT_SIZE:整形大小
PHP_INT_MAX:整形能表示的最大值
系统魔术常量
在PHP中还有一些特殊的常量,他们有双下划线开始+长两名+双下划线结束,这种常量称之为系统魔术常量:魔术常量的值通常会跟着环境变化,但是用户改变不了
_DIR_:当前被执行的脚本所在电脑的绝对路径v
_FILE_:当前被执行的脚本所在的电脑的绝对路径(带自己文件的名字)**_LINE_😗*当前所属的行数
_NAMESPACE_:当前所属的命名空间s_CLASS_:当前所属的类
_METHOD_:当前所属的方法
数据类型
数据类型: data type,在 PHP中指的是存储的数据本身的类型,而不是变量的类型。PHP是一种弱类型语言,变量本身没有数据类型。
PHP的八种数据类型
简单(基本)数据类型:
-
整型:int/integer
-
浮点型: float/double
-
字符串型: string
-
布尔类型: bool/boolean
复合数据类型
-
对象类型: object,存放对象(面向对象)
-
数组类型: array,存储多个数据(一次性)
特殊数据类型
- 资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件)
- 空类型:NULL,只有一个值就是NULL(不能运算)
类型转换
转换方式:
-
自动转换:系统根据需求自己判定,自己转换(用的比较多,效率偏低)
-
强制(手动)转换:认为根据需要的目标类型转换
强制转换规则:
在变量之前增加一个括号**()**,然后在里面写上对应类型:int/integer…
其中NULL类型用到unset()
其他类型转数值的说明
1、布尔true为1,false为0;
2、字符串转数值有自己的规则
2.1以字母开头的字符串,永远为0;
2.2以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)
数据类型
通过一组类型判断函数,来判断变量,最终返回这个变量所保存数据的数据类型(相同结果为true,失败为false
是一组以 is_开头后面跟类型名字的函数:is…XXX(变量名)
- Bool类型不能用echo 来查看,可以使用var dump结构查看
Var dump(变量1,变量2…)
Gettype(变量名):获取类型,得到的是该类型对应的字符串
Settype(变量名,类型):设定数据类型:与强制转换不同。
1、强制转换(类型)变量名,是对数据值复制的内容进行处理(不会处理实际存储的内容)
2、settype会直接改变数据本身
整数类型进制
整数类型
$a = 120; //10进制
$a = 0b110; //2进制,
$a = 0120; //8进制
$a = Ox120; //16进制
进制转换
Decbin(): 十进制转二进制
Decoct(): 十进制转八进制
Dechex(): 十进制转十六进制
Bindec(): 二进制转十进制
浮点型和布尔型
简单说明浮点数为什么同样的字节数存储数据,但是却能表示更大的数据呢?
00000000.00000000.00000000 00000000.→.11111111.11111111111111111111111(整形最大值:所有位都是有效数据)﹒
浮点数:红色7位算的结果是10的指数,后面三个字节存储表示具体数值。00000000 00000000 00000000 00000000 →11111111 11111111 11111111 1111111
Empty():判断数据的值是否为“空”,不是NULL,如果为空返回true,不为空返回
falselsset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false