知识点:
- 标记符,注释
- 变量
- 常量
- 数据类型
- 运算符
- 流程控制
标记符,注释
4种标记符号:
1. 默认形式: <?php php语句 ?>
如果<?php ...?>之后没有html代码,则 ?> 标记可以省略
2. 短标签形式: <? php语句 ?>
默认是关闭的,需要开启配置项【php.ini】: short_open_tag=on
3. script标签形式: <script language=”php”> php语句 </script>
4. asp形式: <% php语句 %>
默认是关闭的,需要开启配置项【php.ini】:asp_tags =on
大小写
变量: 区分大小写
常量: 区分大小写, 可以在php.ini文件中配置为不区分大小写
其他不区分大小写: 如函数名,系统关键字...
注释
单行注释: //注释内容 或 #注释内容
多行注释: /*注释内容*/
变量
概念:
代表一定存储空间及其中数据的一个“标识符”
赋值同时定义变量, $v1 = 1; 图示:
命名规则
以字母或下划线开头 后跟任意数量(含0个)字母,数字和下划线
常见命名:
骆驼命名法: 首单词小写,其后面每个单词首字母大写 。 如: $myName
帕斯卡命名法:每个单词首字母大写 。 如: $MyName
下划线分割法:每个单词小写,并且之间用下划线分开 。 如:$my_name
基本操作
取值 如 $v = 12.3; $m=round($v)
赋值 如 $v = 12.3;
判断 isset() 判断该变量是否存在,或该变量是否有数据值!
删除unset():断开该变量名跟该变量原有的数据值之间的“引用关系”
传值形式
值传递: 值相等,相互独立。 如 $v1 = 1; $v2 = $v1; 图示:
既是将变量$v1的值进行了复制,然后再给另一变量v2赋值
引用传递: 实质就是2个变量指向同一个数据空间。 如 $m1 = 1; $m2 = & m1; 图示:
既将变量$m1跟其数据值之间的“引用关系”,复制一份,再给予变量$m2
可变变量
连续出现“$”的变量形式。 如: $v = "a"; $a=10; 则 $$v = 10.
1 <?php 2 //可变变量 3 $v1 = 123; 4 $v2 = 221; 5 $v3 = 3; 6 $v4 = 9; 7 $v5 = 100; 8 $v6 = 200; 9 10 //求变量的和 11 $sum = 0; //用于存储和 12 for($i = 1; $i <= 6; $i++) { 13 $v = "v".$i; 14 $sum += $$v; 15 } 16 echo $sum; 17 ?>
预定义变量
超全局数组,有超全局作用域,系统定义与维护 。主要有$_POST, $_GET,$_REQUEST,$_SERVER,$GLOBALS, $_COOKIE,$_SESSION ....
$_POST 通过表单以post方式(method=”post”)提交的时候所提交的所有数据 接收数据如: $name = $_POST['name'];
表单提交数据注意: 对于radio和checkbox数据不填则接收不到,其他不填也会接收到
$_GET 通过get方式提交时所提交的所有数据 接收数据如: $name = $_GET['name'];
有5种方式实现get提交数据
形式1: form表单get提交
如 <form method="get" action="index.php"> ...... </form>
形式2: a标签提交
如 <a href=”index.php?name=young&gender=male&age=18”>主页</a>
形式3: js跳转提交1
如:<script> location.href=” index.php?name=young&gender=male&age=18”; </script>
形式4:js跳转提交
如:<script>location.assign=” index.php?name=young&gender=male&age=18”; </script>
形式5: php跳转提交
如:header(“location: index.php?name=young&gender=male&age=18”);
$_REQUEST 是$_GET变量和$_POST变量数据的“合集”:即,它里面同时存储了这两种数据 . 接收数据如: $name = $_REQUEST['name'];
提交表单可以同时具有get和post数据。
如 <form method="post" action="index.php?name=young&gender=male">.....</form>
接收数据时, 如果post与get数据项名称相同,如$_POST['name']='young', $_GET['name']='admin'。
如果使用$_REQUEST方式接收,则post数据覆盖get数据。
可以通过配置项【php.ini】进行设置: request_order="GP" G代表GET P代表POST 后者覆盖前者
$_SERVER 代表一次浏览网页的过程中的浏览器端的一些信息或服务器端的一些信息
常用选项:
$_SERVER["REMOTE_ADDR"] 访问者IP地址
$_SERVER["SERVER_ADDR"] 服务器IP地址
$_SERVER["SERVER_NAME"] 服务器名字 既站点配置中设置的ServerName 如: www.test.com
$_SERVER['DOCUMENT_ROOT'] 站点物理地址。 既站点配置中设置的 DocumentRoot 如: d:/www
$_SERVER["PHP_SELF"] 当前网页地址,不包含域名 如 /index.php
$_SERVER["SCRIPT_FILENAME"] 当前网页的物理路径 如 d:/demo/index.php
$_SERVER["QUERY_STRING"] 获取当前网页地址中的所有get数据(既 ?号后面部分),但只是一个整体的字符串而已 如:id=2&name=young
$GLOBALS :存储所有全局变量。 可以用于在局部范围不可以使用全局变量的时候,可以用它来取得指定全局变量的值
isset() 与 empty()
isset(变量): 判断变量是否存在,或变量是否为空(null),如果存在,返回true,否则返回false
empty(变量): 判断变量的“内容”是否为空的,内容是空的返回true,否则返回false
为空情形: 0 0.0 “” “0” false null array()空数组
常量
概念
含义: 是其中存储的数据不会也不应该改变的“标识符”
定义
方式1: define('常量名',值); 如: define('PI',3.14);
方式2: const 常量名=值; 如: const HOST='localhost';
注意: const语法只能用在“顶层代码”位置,而不能用在大括号的位置
取值
形式1: 直接使用常量名 如: echo PI;
形式2: 使用函数constant('常量名') 如 echo constant('PI');
与变量的区别
定义形式不同
使用形式不同:常量无需$符号
可变程度不同,常量的值不可以改变,常量也不可以销毁
作用范围不同:常量具有超全局作用域(函数内外都可以直接使用)
可用类型不同:常量只能存储标量类型(整数,浮点数,字符串,布尔值)
判断是否存在
defined(“常量名”) 存在返回true 不存在返回false
使用未定义常量,会有Notice警告,系统会将该 未定义常量名称 作为 其值 使用
预定义常量
常见: 【可参考PHP手册附录》保留字列表》预定义常量】
M_PI: 就是圆周率的常量值
PHP_OS: 就是PHP运行所在的操作系统
PHP_VERSION: 就是PHP的版本号
PHP_INT_MAX: php中的最大的整数值
魔术常量
__FILE__ 代表当前网页文件的网页物理路径
__DIR__ 代表当前网页文件所在的目录
__LINE__ 代表这个常量名当前所在的行号
数据类型
8种数据类型
基本数据类型(标量类型)
整型类型: int interger
浮点类型: float double 如: $v1 = 123.456E2; //含义为: 123.456乘以10的2次方
不要用浮点数进行大小比较, 如果要比较的浮点数,转换为整数之后再比较。如 要求精度为3位小数,则都乘以1000,然后取整后比较
当整数运算的结果超出整数的范围后,会自动转换为浮点数
字符串类型: string
布尔类型: bool Boolean
复合类型:
数组:array
对象:object
特殊类型:
空类型 null 这种类型中,只有一个数据,那就是null
资源类型 resource
整数类型进制转换
整数类型
0b1010(二进制), 0123(八进制), 123(十进制), 0x123(十六进制)
Bin: 二进制 oct: 八进制 dec: 十进制 hex: 16进制
手工进制转换
10进制转换为2进制: 除2取余倒着写出所有余数
将一个10进制数字除以2,得到商和余数,如果商还大于等于2,则继续除以2,继续得到商和余数,依次类推,
直到商为0为止,然后将前面的所有余数按倒序写出来对应的2进制数字
10进制转换为8进制: 除8取余倒着写出所有余数
10进制转换为16进制:除16取余倒着写出所有余数
8进制转换为10进制:将8进制数字的每个位上的数乘以其对应位上的权值,然后相加之后的结果
16进制转换为10进制:将16进制数字的每个位上的数乘以其对应位上的权值,然后相加之后的结果
2进制转换为10进制:将2进制数字的每个位上的数乘以其对应位上的权值,然后相加之后的结果
小数二进制的做法: 乘2并顺序取整数部分
十进制转换为其他进制
decbin(一个10进制数字):结果返回的是该数字的2进制数字形式的字符串
decoct(一个10进制数字):结果返回的是该数字的8进制数字形式的字符串
dechex(一个10进制数字):结果返回的是该数字的16进制数字形式的字符串
其他进制转换为十进制
bindec (一个2进制数字字符串):结果返回的是该2进制数字字符串对应的10进制数字形式的数字
octdec (一个8进制数字字符串):结果返回的是该8进制数字字符串对应的10进制数字形式的数字
hexdec (一个16进制数字字符串):结果返回的是该16进制数字字符串对应的10进制数字形式的数字
获取数据类型
getType($变量): 返回的是该类型的名字 (字符串)
var_dump($变量): 会输出该变量的类型,数据内容,(以及长度)
4种形式的字符串
形式1:单引号 $str=‘hello’; 可以识别的转义符有: \\ \'
形式2:双引号 $str = "hello"; 可以识别的转义符有: \\ \" \n(换行符) \r(回车符) \t(tab符)
形式3:双引号定界符heredoc: 可以识别的转义符有: \\ \n \r \t \$
1 $str= <<<"LAB" 2 this is a “test”!,这是一个'测试'!v1=$v1; 3 LAB; 4 //注:结束行只能是标识符及分号
形式4:单引号定界符nowdoc:
1 $str = <<<'LAB' 2 this is a test! 3 LAB;
数据类型转换
在任何运算中,如果需要某种类型的数据,而给出的数据不是该类型,通常都会发生自动转换
自动转换: 由“运算符”或类似运算符语句决定
算术运算,只对数值进行计算
字符串中数字的转换规则:只识别字符串的前面数字部分 如 1+ “3a5b” =4
强制转换:
形式: (目标类型)数据 如 (int)$a;
目标类型通常有:int,float,string,bool,array,object
转换不改变变量本身,要改变变量本身,使用setType($var,$value);
常见的类型相关的系统函数
var_dump() 打印变量的完整信息
getType($var) 获取变量的类型的名字(字符串)
setType($var,$type) 强制转换变量的类型
isset() 变量是否设置
empty() 变量的值是否为空
unset() 删除变量
is_xx系列函数: 判断是否为某种类型
is_int($x) 判断是否是一个整数类型
is_float() 判断是否是一个浮点类型
is_string() 判断是否是一个字符串类型
is_bool() 判断是否是一个布尔类型
is_array() 判断是否是一个数组
is_object() 判断是否是一个对象
is_null() 判断是否是为null
is_numeric() 是否是一个数字
is_scalar() 是否是一个标量类型(int,float,bool,string)
运算符
1) 算术运算符
符号: + - * / % ++ --
用于对数字进行运算,如果符号两边是非数字,会自动转换为数字再进行运算。
求余(%)运算,先取整在求余。 如 11.3%3 相当于 11%3。
++, -- 只能对于数字或字母。字符串也可以进行自增减。
如: $val = "abc" ; $val++; echo $val; //$val ="abd";
$va = "abc9"; $va++; echo $va; //$va="abd0";
“前自增” 先对变量自加再做其他运算,“后自增”先做其他运算再对自加变量加1; 自减类似。
2)比较运算符
符号: > < >= <= == != === !==
不要对浮点数进行大小比较。
标量之间比较规则:
比较的数据中,有布尔值,则自动转为布尔值载进行比较。
否则, 如果比较的数据中,有数字值,则自动转为数字进行比较。
否则,如果比较的数据都是“数字字符串”,则自动转为数字再进行比较
否则,按照字符串进行比较
3) 逻辑运算符
符号: && || !
逻辑运算注意短路现象。如果有多想判断,将简单的放在前面。
4)字符串运算符
符号: . .=
字符串连接, 如果两边不是字符串,会自动转换为字符串进行连接
5) 复制运算符
= += -= *= /= %=
6) 条件运算符(三目)
形式: 数据值1 ? 结果值1 : 结果值2;
if等价形式: if(数据值1){ 结果值1;} else {结果值2; }
如果省略“结果值1”则为其本身。 如 $res=100?:10; //结果 $res=100;
7) 位运算符号
符号: & | ~ ^ << >>
仅仅针对于整数类型进行运算
按位异或: 相同为0 不同为1. 如1^1 = 0;
安慰左移运算<<: 右边补0,左边移出
原码,反码,补码:
正数反码:等于其本身; 负数的反码:符号位不变,其它位取反;
正数的补码等于其本身; 负数的补码:符号位不变,其它位取反再加1。
8) 数组运算符
符号: + == != === !==
对于数组 + 号 : 数组联合, 将右边的数组项合并到左边的数组的后面,得到一个新的数组。如果有重复的键,不覆盖,保留左边数组的数据。
如: $arr = array(1=>11,2=>22,3=>33); $narr = array(3=>23,4=>24); $resArr = $arr +$narr; //结果:array(1=>11,2=>22,3=>33,4=>24)
== : 键名和值相等则为真,顺序可以不同。
9)错误抑制运算符
符号: @
可以抑制可能产生的报错信息。如 $conn =@ mysql_connect(....);
运算符优先级参考手册: 语言参考》运算符》运算符优先级
流程控制
1) 绘制流程图
开始,结束: 用椭圆 表示
语句块: 长方形图形
判断:带指进和指出的四边形
输入输出: 四边形
2)分支结构
if分支结构
1 if(条件1){ 2 分支1; 3 } else if(条件2){ 4 分支2; 5 } ….. else{ 6 //else 分支 7 }
switch分支结构
1 switch(表达式) { 2 case 值1: 分支1; 3 [break; ] //可以省略 4 case 值2: 分支2; 5 [break; ] 6 ……. 7 Default : default 分支; 8 } 9
3)循环结构
for循环
while()循环
do..while()循环
foreach()循环