目录
>代码标记
> 语句及注释
> 语句分隔符
?> 变量
> 变量命名规范
> 预定义变量
> 可变变量
?> 变量传值
> 常量
> 常量定义形式
> 常量命名规范
?> 常量使用形式
> 系统常量
> 数据类型
> 类型判断
?> 强制类型转换
> 类型转换 - 字符串转数值
> 获取及设定数据(变量)的类型
?> 整型
> 浮点数
> 布尔型
>运算符
>算术运算符
?> 比较运算符(只补充,基础略过)
> 逻辑运算符
> 连接运算符
> 错误抑制符
> 类型运算符
> 执行运算符
> 流程控制
>流程控制替代语法
> foreach 循环
>代码标记
PHP代码常嵌入HTML内容中,需要有特定的标记来标识。 ↓ 为最常用的标准标记
<?php
···(PHP代码)
?>
扩展:四种标记形式(推荐只用标准标记)
1. 标准式 <?php ?> //推荐使用
2. 短风格 <? ?>
<?= ?>
3. asp风格 <% %>
4. 脚本风格 <script language="php"></script> //不使用,容易跟前端冲突
// <? ?> 需修改php.in文件 short_open_tag = On
// <% %> 需修改php.in文件 asp_tags = On
> 语句及注释
1. 单行注释 // #
2. 多行注释 /* */
3. 多行文档性注释 /** */
用户定义的类和函数、内置的结构以及关键字(如echo、while、class等)是不区分大小写的,而变量是区分大小写的。
> 语句分隔符
在PHP中,代码以行为单位,系统一般通过 ; 判断行的结束
- PHP中标记结束符 ?> 有自带语句结束符的效果,最后一行代码可以没有语句结束符
- PHP中其实很多代码书写并不是嵌入到HTML中,而是单独存在,通常书写习惯中不建议使用标记结束符 ?> ,PHP会自动从开始到最后全部认为是PHP代码,从而解析
?> 变量
//定义变量,由符号$与变量名组成,在PHP中不需要任何关键字定义变量(赋值)
$var1; //定义变量
$var2 = 1; //定义同时赋值
//访问变量
echo $var2;
//修改变量
$var2 = 2;
//删除变量,使用unset(变量名)
unset($var2);
> 变量命名规范
- 在PHP中变量名字必须以 " $ " 符号开始
- 名字由字母、数字和下划线" _ "构成,但是不能以数字开头
- 在PHP中本身还允许中文变量(但不推荐,容易引起编码错误)
> 预定义变量
> 可变变量
如果一个变量保存的值刚好是另一个变量的名字,那么可以直接通过访问这个变量得到另一个变量的值,PHP的可变变量可由符号$与普通变量组成。
?> 变量传值
需要注意的是,PHP的引用并不像C语言中的地址指针,通过引用赋值定义的变量与原变量并不表示同一个内存单元,而仅仅是其值相互关联而已。所以,若对原变量使用销毁(unset)操作,不会导致引用变量的消失
$x1 = 3.14;
$x3 = &$x1;
unset($x1); //销毁变量x1
var_dump($x3); //仍然会正常输出变量x3的值
> 常量
常量:const/constant,是一种在程序运行当中,不可改变的量(数据)
常量一旦定义,通常数据不可改变(用户级别)
> 常量定义形式
在PHP中常量有两种定义方式
1)使用define( ) 函数 ????? function define($name,$value,$case_insentive=null) ????? 参数:1.常量名称?? 2.常量的值或表达式?? 3.是否区分大小写(默认为false,即区分) 2)使用const关键字? (5.3之后才有的) ???? const 常量名 = 常量值 ???? 使用const关键字,声明语句必须处于最上层的作用域内。 ???? 即不能使用该方法在函数、循环以及if语句内定义常量。
define( ) 和 const 定义的常量是有区别的:访问权限区别
> 常量命名规范
- 常量的名字由字母、数字和下划线组成,不能以数字开头
- 常量的名字通常是大写字母为主(与变量以示区别)
- 常量名可以不加引号,但是通常加上引号
- 常量命名规则比变量要松散,可以使用一些特殊字符,该方式只能使用define定义
?> 常量使用形式
?有的时候还需要使用另一种形式来访问(针对的是特殊名字的常量) ?constant('变量名')
> 系统常量
系统帮助用户定义的常量,用户可以直接使用
常用的几个系统常量: 1. PHP_VERSION :? PHP版本号 2. PHP_INT_SIZE? :? 整形大小 3. PHP_INT_MAX :? 整形能表示的最大值(PHP中整形是允许出现负数,带符号)
?在PHP中还有一些特殊的常量 : 系统魔术常量,格式:__+常量名+__ ?魔术常量的值通常会跟着环境变化,但是用户改变不了
> 数据类型
在PHP中将数据分为三大类八小类 简单(基本)数据类型:4个小类
- 整型:int/integer,系统分配4个字节存储,表示整数类型(有前提)
- 浮点型:float/double,系统分配8个字节存储,表示小数或者整型存不下的整数
- 字符串型:string,系统根据实际长度分配,表示字符串(引号)。
- 布尔类型:bool/boolean,表示布尔类型,只有两个值:true和false
复合数据类型:2个小类
- 对象类型:object,存放对象(面向对象)
- 数组类型:array,存储多个数据(一次性)
特殊数据类型:2个小类
- 资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件)
- 空类型:NULL,只有一个值就是NULL(不能运算)
PHP中的变量在以下三种情况下均被认为是NULL类型:
- 被赋值为NULL
- 没有被赋值
- 使用unset进行类型转换后的返回值
> 类型判断
通过一组类型判断函数,来判断变量,最终返回这个变量所保存数据的数据类型(相同结果为true,失败为false),是一组以 is_ 开头后面跟类型名字的函数 : is XXX(变量名)
?> 强制类型转换
- 使用函数setType()???? function srttype(& $var,$type)
- 使用类型转换函数intval()、floatval()、strval()
- 使用强制类型转换运算符
注意:
- (string)(int)(float)(array)(object)(bool)(unset) ? null、resource不能转化
- ?? 对变量使用函数setType()后,变量本身的数据类型发生了变化,而使用以val结尾的函数,只是得到了新类型的数据,变量本身的类型不变
> 类型转换 - 字符串转数值
- 以字母开头的字符串,永远为0
- 以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)
> 获取及设定数据(变量)的类型
var_dump(变量名): 得到变量的类型和值 gettype(变量名):获取类型,得到的是该类型对应的字符串 setttype(变量名,类型):设定数据类型,与强制转换不同
- 强制转换(类型)变量名,是对数据值复制的内容进行处理(不会处理实际存储的内容)
- settype会直接改变数据本身
?> 整型
可由二进制、八进制、十进制和十六进制来表示
> 浮点数
> 布尔型
true 和 false 是PHP的内部关键字,没有大小写之分
在进行某些数据判断的时候,需要特别注意类型转换? (更多具体可看附录-PHP类型比较表)
- empty():判断数据的值是否为"空",不是NULL,空则返回true
- isset():判断数据存储的变量本身是否存在,存在则返回true
>运算符
>算术运算符
?> 比较运算符(只补充,基础略过)
- === :全等于,左边与右边相同:大小以及数据的类型都要相同
- !==? :不全等于,只有大小或者类型不同
> 逻辑运算符
浅看两道面试题
$a =10;
$b = 5;
if($a = 8 || $b = 7){
$b++;
}
echo $a;//1
echo "<br/>";
echo $b;//6
$a =10;
$b = 5;
if($a = 8 && $b = 7){
$b++;
}
echo $a;//1
echo "<br/>";
echo $b;//8
> 连接运算符
连接运算:是PHP中将多个字符串拼接的一种符号
- .??? :将两个字符串接到一起
- .= :复合运算,将左右内容连接后重新赋值给左边的变量 A.=b -> A=A.b
> 错误抑制符
在可能出错的表达式前面使用@符号即可
错误抑制符通常在生产环境(上线)会用到,在开发的时候不会用
> 类型运算符
instanceof用于判断一个对象是不是某个类的对象
class A{}
$obj = new A();
$r1 = $obj instanceof A;
> 执行运算符
使用反引号(`),尝试将反引号中的字符串内容作为操作系统的系统命令来执行,并返回该系统命令的执行结果
$cmd = `cmd`;
echo $cmd;
> 流程控制
>流程控制替代语法
> foreach 循环
foreach是针对数据集合的循环,比如数组、列表等
foreach($arr as $value) 语句
foreach($arr as $key => $value) 语句
foreach ($arr as $value)
$sum += $value;
?> 文件包含
在一个PHP脚本中,去将另外一个文件(PHP)包含进来,去合作完成一件事情。
> 文件包含四种形式
- include:包含文件
- include_once:系统会自动判断文件包含过程中,是否已经包含过
- require:与include相同
- require_once:以include_once相同
include和include_once的区别:
- include系统会碰到一次,执行一次;多次加载,会执行多次;
- include_once:系统碰到多次,也只会执行一次。
require和include的区别:(唯一的区别在于包含不到文件的时候,报错的形式不一样)
- include:发出警告信息,程序继续运行
- require:发出致命错误,程序停止运行
> 文件包含基本语法
include ‘文件名字’;
include(‘文件名字’); //文件名字:路径问题
>向上包含和向下包含
- 向上包含:先包含文件,后使用文件中的内容
- 向下包含:先准备内容,然后包含另外的文件,在另外的文件中使用当前内容
?> 文件加载路径
- 绝对路径
- 相对路径
绝对路径和相对路径的加载区别:
- 绝对路径相对效率偏低,但是相对安全(路径不会出问题)
- 相对路径相对效率高些,但是容易出错(相对路径会发生改变)
?> 文件嵌套包含
文件嵌套包含:一个文件包含另外一个文件,同时被包含的文件又包含了另外一个文件。
?嵌套包含的时候就很容易出现相对路径出错的问题:相对路径会因为文件的包含而改变(./和../):windows下面,每一个文件夹下都有.和..的文件夹。
> 函数
> 函数的定义
函数有几个对应的关键点:function关键字、函数名、参数(形参和实参)、函数体和返回值
function 函数名(含类型说明的形参表):类型说明符
{
//函数体
//返回值:return 结果;
}
> 函数调用特点
?> 函数命名规范
- 函数名不区分大小写
- 由字母、数字和下划线组成,但是不能以数字开头
- 在一个脚本周期中,不允许出现同名函数
> 默认值
> 引用传递
Function 函数名(形参1,&形参2){
//函数体
}
> 函数返回值
返回值:return,指的是将函数实现的结果,通过return关键字,返回给函数外部(函数调用处):在PHP中所有的函数都有返回值。(如果没有明确return使用,那么系统默认返回NULL)
return还可以在文件中直接使用(不在函数里面):代表文件将结果return后面跟的内容,转交给包含当前文件的位置。(通常在系统配置文件中使用较多)?
?> 全局变量与局部变量
默认情况下,全局变量在内部函数中是不可访问的。为了让一个函数能够访问到全局变量,可以在函数内使用global关键字来声明变量,或者使用PHP的$GLOBALS数组。
> 超全局变量
- 超全局变量:系统定义的变量(预定义变量:$_SERVER、$_POST等)
- 所属超全局空间:没有访问限制(函数内外都可以访问)、
- 超全局变量会将全局变量自动纳入到$GLOBALS里面,而$GLOBALS没有作用域限制,所以能够帮助局部去访问全局变量:但是必须使用数组方式
> global关键字
global关键字:是一种在函数里面定义变量的一种方式
> 静态变量
function 函数名(){
//定义变量
static $变量名 = 值; //通常会在定义的时候就直接赋值
}
-
静态变量的作用是为了跨函数共享数据(同一个函数被多次调用) -
> 可变函数/变量函数
可变函数:变量的值为函数名,可使用变量+()来充当函数使用。
$变量 = ‘display’;
Function display(){
···
}
$变量(); //可变函数
> 内部函数
所谓内部函数,就是定义在某个函数内部的函数。对内部函数的外部调用,其调用语句与主函数的调用语句之间存在顺序依赖。(必须位于主函数调用语句之后)
function myprint(string $param1,int $param2):void {
function inmyprint() {
echo '这是inmyprint函数的输出!'.'<br/>';
}
echo '这是myprint函数的输出!'.'<br/>';
echo $param1,$param2,'<br/><br/>';
echo '内部调用inmyprint后输出:<br/>';
inmyprint();
return;
}
//inmyprint();
myprint('a = ',10);
inmyprint();
> 回调参数
将函数名作为参数,被作为函数传递的函数名就是回调函数,其实就是在函数内部使用可变函数
?> 匿名函数
变量名 = function(){
//函数体
};
变量保存匿名函数,本质得到的是一个对象(Closure)
> 闭包
要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域) 简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)
> 伪类型
假类型,实际上在PHP中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。
int string null bool array object float resource //三大类八小类
callback 参数必须是一个函数名
mixed 可接受不同类型
number 接受整型和浮点
void 无参数/无用的返回值
> 常用系统函数の输出
- print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回1,可以不需要使用括号
- print_r():类似于var_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)
?> 常用系统函数の时间
?> 常用系统函数の数学
- max():指定参数中最大的值
- min():比较两个数中较小的值
- rand():得到一个随机数,指定区间的随机整数
- mt_rand():与rand一样,只是底层结构不一样,效率比rand高(建议使用)
- round():四舍五入
- ceil():向上取整
- floor():向下取整
- pow():求指定数字的指定指数次结果:pow(2,8) == 2^8 == 256
- abs():绝对值
- sqrt():求平方根
?> 常用系统函数の函数
- function_exists():判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)
- func_get_arg():在自定义函数中去获取指定数值对应的参数
- func_get_args():在自定义函数中获取所有的参数(数组)
- func_num_args():获取当前自定义函数的参数数量
> 错误处理
指的是系统(或者用户)在对某些代码进行执行的时候,发现有错误,就会通过错误处理的形式告知程序员。
> 错误分类
>错误代号
所有看到的错误代号在PHP中都被定义成了系统常量(可以直接使用)
|