一、格式
1、标准格式(xml格式)

注:如果一个文件里只有php代码,结束符'?>'可以不写,并建议不写。如果写了结束符"?>"后多了几个换行符,在其他文件加载该文件的时候会把换行符也加载进去。

2、script格式

3、短格式

4、asp格式
注:短格式和asp格式需要修改php.ini 文件来开启(默认为关闭)

注释
1、单行注释
//注释内容
2、多行注释
/*多行
注释*/
示例:

二、变量及操作
程序就是对内存进行操作(对内存进行读写操作)
1、声明
语法:
$变量名=值;
说明:
php中的变量必须以"$"开头
变量名只能包含字母、数字、下划线、只能以字母、下划线

2、修改变量的值

3、删除变量
语法:
unset($变量名)
示例:

4、可变变量
示例1:

运行结果:

作用:通过一个变量访问另一个变量
示例2:

运行结果:

作用:通过一个变量创建另一个变量
三、预定义变量
PHP为我们预先定义了一组变量,这些变量会在不同的需求中使用。
$_GET 用于接收前台表单使用get方式提交的数据
$_POST 用于接收前台表单使用post方式提交的数据
$_REQUEST 用于接收前台表单使用get或post方式提交的数据
$_SERVER 包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组,要熟,可阅读
博客(https://www.cnblogs.com/rendd/p/6182918.html)
$_COOKIE
$_SESSION
$_FILES
$GLOBAL 在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以
在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。比如变量$a1,写法为 $GLOBALS['a1'].课参考博
客(https://www.cnblogs.com/Strive-count/p/6155066.html)
四、内存原理
1、内存结构
栈区:
保存的是变量名(引用)。
特点:对于CPU来说,读写的速度是最快的。
堆区:
存储"复杂"的数据,数组、对象。
数据段:
存储的是"简单"的数据,例如:整型、浮点型、布尔值。
代码段:
存储的是源代码对应的机器指令。
输出缓存:
输出指令例如:echo、print、print_r、var_dump,这些指令都会将要输出的数据放在输出缓存中。
2、php执行过程
编译阶段
进行语法检查、词法检查、代码优化。
编译通过之后将源代码转换为机器指令。
执行阶段
如过编译通过后,会将源代码对应的机器指令,保存在代码段,再开始执行代码段中的机器指令
示例:

执行过程中在内存的变化:
(1)、编译阶段
(1.1)、语法检查、词法检查、代码优化,通过后在大妈段中生成机器指令。
(2)、执行阶段
(2.1)、执行代码段中的代码
(2.2)、执行$v1=10,会在栈区开辟一个空间存储变量$v1,将数据保存到数据段的全局区,再将数据的物理地址赋值给栈区的变量$v1.
(2.3)、执行$v2=$v1;在栈区开辟一个空间存储变量$v2,读取变量$v1的值,读取出来
保存在数据段全局区,将这个数据的地址赋值给栈区的变量$v2.
(2.4)、执行$v2=20,找到栈区的$v2,并根据地址找到数据段全局区对于的空间,将数据覆盖保存。
(2.5)、执行echo $v1;找到栈区中的变量$v1,根据地址找到数据段全局区中的空间,将空间中的值读取出来。并把数据10放到输出缓存中
(3)、程序执行结束,输出缓存中的数据会自动返回apache,apache返回给浏览器,同时会将栈区中的内容清空。同时数据段中的数据也会被系统销毁,代码段中的数据会销毁
3、php嵌入2到HTMl的执行过程
当php功能模块在处理一个php文件时,它只关心php代码(使用PHP标签包含的代码)‘对于非PHP代码,它会原样输出
4、php中变量的传值方式
1、赋值传值
使用一个变量a为另一个变量b赋值时,传递的是变量a的值,这中赋值方式就是赋值传值。

2、引用传值
使用一个变量a为另一个变量b赋值时,传递的是变量a的地址,这中赋值方式就是引用传值。

提示:
js中不允许人为的更改传值方式,但是PHP中可以使用取地址符’&‘,来将赋值传值更改为引用传值
五、常量
1、概念
常量就是一种特殊的变量,也是用于存储数据。常量一旦定义就不允许 修改其值,常量本身也不允许删除【unset()】;
2、定义
(1)、语法 1:
define('常量名',值);

(2)、语法 2:
const 常量名=值;

说明:
常量一旦定义就不允许更改
常量的值只能是基本数据类型(标量数据类型)
常量默认区分大小写,一般常量名在命名时,采用全大写的形式
(3)、define VS const
define 语法可以在分支结构(if...else)中定义常量,const不允许;
define定义的常量可以自定义是否区分大小写;格式 define('常量名',数值,Boolean),true不区分大小写,
false 区分大小写。
3、常量的判断及获取所有的常量
(1)、判断常量是否存在
defined('常量名')
(2)、获取php中所有常量
get_defined_constants();

4、魔术常量
__FILE__ 用于获取当前文件名完整路径及文件名
__DIR__ 用于获取当前文件的路径
__LINE__ 用于获取当前行号
__FUNCTION__ 用于获取当前函数的函数名
__METHOD__ 用户获取当前方法的方法名
__CLASS__ 用于当前类的类名
__NAMESPACE__ 用于获取当前空间的空间名
六、PHP的数据类型
1、数据类型的分类
(1)、标量数据类型
int 整型
float 浮点类型
boolean 布尔类型
string 字符串
(2)、复合数据类型
array 数组
object 对象
(3)、特殊数据类型
null null
resource 资源类型
2、整数(Int)类型
线性的整数
(1)、十进制
$v = 255
(2)、八进制
以0开头,并不能有超过7的数字
(3)、十六进制
以0x开头、包含0-9,a-f


3、浮点(float)类型
(1)、表示方式-普通
$v1 = 3.5;
(2)、表示方式-科学计数法
$v2 = 1.23E-9;
注:不要轻易的对浮点数进行比较
4、字符串(string)类型
(1)、使用单引号定义的字符串
能够被转义的字符有 \\ \'
单引号定义的字符串的变量不能解析其值;
(2)、使用双引号定义的字符串
能够被转义的字符有 \' \" \t \r \n \\ \$ ...
双引号定义的字符串的变量的值可以被解析;
(3)、heredoc
也是用于定义字符串的,主要应用场景是定义大段的字符串。
语法:
$herdoc = <<<开始标记
大段的文本
结束标记;
注:开始标记与结束标记必须相同,且结束标记必须顶格书写;

转义符:\
\' ,\" ,\t ,\r ,\n ,\\ ,\$ ...
示例:


注:
如果要输出变量的值后还有其他内容,会报错


可采用范围解析限定符{}


或将字符串分开在进行连接

5、布尔(Boolean)类型
只有两个值:true 、false;
6、数组(Array)类型
(1)、索引数组
数组元素的下标是数值
(2)、关联数组
数组元素的下标是字符串
数组原属的访问:
索引数组 数组名[int];
关联数组 数组名['name'];
注:
如果在一个字符串中想要输出数组的元素,那么下标不需加引号
如果使用范围解析限定符{},那么下标必须加引号

7、null类型
只有一个值-null;
8、资源(resource)类型
一个特殊的变量,程序员无法直接定义一个资源,必须使用PHP提供的获取资源的函数
七、数据类型的转换
当参与运算的两个数据,类型不同时,php会自动进行转换。
有时也人为的进行强制转换
1、自动转换


按学习视频中这里应该不会出现警告而直接输出10000;
错误:A non well formed numeric value encountered(遇到非格式良好的数值)
原因:这种现象常常出现在弱类型语言上!时间戳并不是真正的int类型, 这种问题经常出现在从数据库中提取出数据,但是数据不是int类型的,可能是varchar等等。
解决方法:
使用 intval() 函数将不匹配的数据类型转换成int数据类型即可
2、强制类型转换
主要了解其他数据类型转换为布尔值的情况。
{
当其他类型转换为 boolean类型 时,以下值被认为是FALSE:
布尔值 FALSE
整型值 0(零)
浮点型值 0.0(零)
空白字符串和字符串"0"
没有成员变量的数组
特殊类型 NULL(包括尚未设定的变量)
所有其它值都被认为是 TRUE(包括任何资源)。
}
八、数据及类型的判断
判断函数的格式:
常用
is_int(v);
is_string(v);
is_bool(v);
is_float(v);
is_scalar(v); 判断变量v类型是否为标量(int、string、bool、float);
is_array(v);
is_object(v);
is_resource(v);
is_null(v);
isset(v); 判断变量是否有设置值;(判断变量的值是否为null值)
empty(v); 用于判断变量v的值是否为"空",此处的空表示只要等效于布尔false的值都被
empty认为是空,如果是空返回true,否则返回false