PHP(二)-php基础语法
自学小笔记
php基本语法形式
区分大小写。
一条语句使用一个分号结束。
php注释形式。
php的标记符
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
1. <?php 这里要写符合php语法的语句 ?>
2. <script language="php">这里要写符合php语法的语句</script>
3. <? 这里要写符合php语法的语句 ?>(不推荐,此方法依赖于php.ini中的设置项`short_open_tag = Off`(需要改为On))。
php的结束标记?>
如果php
的语句之后,不存在任何的html
的代码,那么可以忽略。
php的区分大小写特性
- 常量区分大小写。
- 常量通常默认也区分,但可以人为设定为不区分(不推荐)。
- 其他场合的关键字都不区分,比如函数名,系统关键字(
for
,if
,return
…).
php的注释
单行注释: 形式1: //注释内容 #注释内容
多行注释: /* 注释内容,可以多行 */
变量
含义:名称和值得关系可以称为“引用”(指向).使用一个变量其实就是指使用该变量所引用的值。
使用形式:必须以$
开头,后面紧跟变量名。
定义形式:直接个一个变量赋值,如果是第一次,就断是定义了。没有单纯定义变量而不赋值的语句。–所以php
不支持“单纯定义”
变量的基本操作
- 赋值
- 取值
- 判断
isset()
:就是判断一个变量是否“有效”,不存在或者值为null
都是无效,其他有效。 - 删除
unset()
:就是判断断开变量名跟数据之间的引用关系。
常用的命名法
- 驼峰命名:手单词小写,其后每个单词首字母大写。
- 帕斯卡命名:每个单子首字母大写。
- 下划线命名:每个单词都小写,并且用下划线区分开。
传递类型
只有两种,引用传递和值传递。
在php中,只有一种语法形式可以实现变量的引用传递方式:&
符号。
$v1 = 1;
$v2 = &$m1; //引用传值方式
可变变量
$s1 = "abc"; //一个变量,里面存储的是字符串"abc"
$abc = 10; //
echo $$s1; // =10
说明:
- 在
php
中,一个“$
”后面,总是跟着一个变量名。 - 所以以第一个
$
说明后面是一个变量名,名字为:$1
既“abc”。 - 所以等价于
$abc
, 所以等于10
.
总结:所谓动态变量,其实就是变量的名字是可以动态变化的以获取不同的数据值。
预定义变量
所谓与定义变量,其实指,php这个语言工具中,预先就定义好的变量;我们只是“拿来使用”。
综述:
- 主要有:
$_GET
,$_POST
,$REQUEST
,$SERVER
,$GLOBALS
, - 均是数组
- 系统定义与维护 –> 我们不需要给其赋值或者销毁值,只需要用其值即可。
- 具有超全局作用域 –> 哪里都可以用
- 不同情形下可能具有不同的值
$_POST变量
含义:它代表用户用过表单以post方式(method=“post”)提交的时候所提交的所有数据–这个称为post数据。
$name = $_POST[name] ; //获取到上一个html中的form表单post提交,name=name的input标签的值。
$age = $_POST[age];//获取到上一个html中的form表单post提交,name=age的input标签的值。
isset(变量): 判断变量是否存在,或者变量是否为null;如果存在返回true,否则就是false。
empty(变量):判断变量内容是否为空,也有一些硬性规定:0,“”,“0”,false,null,array()都是空。 空的话就返回true,否则false。
$_GET变量
含义:代表用户通过get
方式(有四种get方式)提交的时候所提交的所有数据–这个称为get数据。
1.form
表单 method
指定get
方式。
2.a
标签 在文件名后面追加携带参数 <a href="目标文件.php?data1=1&data2=student&age=10">链接说明</a>
3.通过js
技术实现的页面跳转,跟a
标签的连接功能一样
<script>
location.href = "目标文件.php?data1=1&data2=student&age=10";
</script>
//或者使用页面跳转的另一个语法
<script>
location.assign = "目标文件.php?data1=1&data2=student&age=10";
</script>
4.php跳转形式
<?php
//语法形式: header("location:目标网页地址");
header("location:目标文件.php?key1=value1&key2=value2");
?>
输出
print_r($_GET); 或者 var_dump($_GET);
$_REQUEST变量
含义:是$_GET变量
和$_POST
变量的数据的合集,就是它里面同时存储了两种数据。
只要在form
表单method
为post
提交,并且action
目标文件后追加参数,会同时出发两种请求。
默认情况下post
追加到get
之后,但在php.ini
中的request_order
.可以设置。
$_SERVER变量
含义:它代表在一次浏览网页的过程中的浏览器端的一些信息或服务的一些信息。大约有30左右各信息。常用只是几个。
$_SERVER['REMOTE_ADDR']
: 获取访问者的ip地址。$_SERVER['SERVER_ADDR']
: 获取服务器所在的ip地址。$_SERVER['SERVER_NAME']
: 获取服务器的名字,其实就是站点设置中的servername;$_SERVER['DOCUMENT_ROOT']
: 获取站点的真实物理位置,其实就是站点设置中的ducumentroot。$_SERVER['PHP_SELF']
: 获取当前网页地址,(不含域名部分)$_SERVER['QUERY_STRING']
: 获取当前网页地址中的所有get数据(?之后),就是一个字符串。
GLOBALS变量
含义:他是一个"重复性数据",它里面存储了我们自己定义的所有"全局变量"。
$v1 = 1; //定义了一个全局变量。
// 这个时候,就有了这样一个数据:$GLOBALS[V1],其值就是1.
场景: 主要是用于在局部范围不可以使用全局变量,但是有需要该全局变量的值,此时就可以用来取全局变量的值。
常量
常量是相对于变量说的:是一个其中存储的数据不会改变的"标识符"。
常量的 使用就2个方面:定义,取值。
常量的定义:
- 方式1:
defind
(“常量名”,常量值); - 方式2:
const
常量名 = 常量;
常量的使用形式:
-
直接使用常量的名字
-
使用函数
constant(name)
获得一个常量的值。name
是一个常量名字并且是一个字符串。//取常量值的灵活用法,contant()里面也可以不传字符串。 defind("student1",123); //定义一个常量 $1 = 1 ; $2 = "student".$1; echo "<br/> 常量student1的值为:".constant($2); // 这里$2 作为一个字符串的值,等价于常量的名字。
引号中的常量是不能被识别的;而变量却可以。
常量变量的区别
- 定义形式不同:
- 使用形式不同: 常量无需使用$
- 可变程度不同: 常量的值不可以改变,常量也不可以销毁
- 作用范围不同: 常量具有超全局作用域(函数内外都可以直接使用)
- 可用类型不同: 常量只能存储标量类型(整数,浮点数,字符串,布尔)
判断常量是否存在: defind(name)
,返回true就存在。
注意: 在php
中,当使用一个未定义的常量的时候 ,系统会直接将该常量当做有值的常量去使用,并且其值就是该常量名字–虽然也会报错。
预定义常量
就是系统中预先定义好的一些常量,大约有几百个,初学知道几个就行:
M_PI
: 就是圆周率的常量值。PHP_OS
: php运行所在的操作系统PHP_VERSION
: php的版本号PHP_INT_MAX
: php中的最大的整数值- 更多参考手册
魔术常量
其实只是常量的形式,但没有常量的"恒常"的含义:值会变化,只是很少的几个
__FILE__
代表当前网页文件的完整物理路径__DIR__
代表当前网页文件所在的文件夹__LINE__
代表当前这个常量名所在的行号
PHP的数据类型
基本类型(标量类型)
- 整数类型:
int
,integer
- 浮点数类型:
float
,double
- 字符串类型:
string
- 布尔类型:
bool
,boolean
复合类型
- 数组:
array
- 对象:
object
特殊类型
- 空类型:
null
这种类型中,只有一个数据,那就是null
- 资源类型:
resource
整数类型
证书类型的四种写法:
$n1 = 123; //10进制写法
$n2 = 0123; //8进制写法
$n3 = 0x123; //16进制写法
$n4 = 0b1010; //2进制写法(在php5.4以前不支持)
以上定义变量,是因为赋值的值书写成整数形式,如果用字符串也可以 就不需要前面的标示区分例如:0,0x,0b。
进制的转换问题
bin
: 2进制oct
: 8进制dec
: 10进制hex
: 16进制
使用方式: 两个进制转换的缩写名组合(要被转换数字)。六种
// 十进制转其他进制
decbin(123); //将十进制转成二进制 返回为一个字符串。
decoct(123); //将十进制转成八进制 返回为一个字符串。
dechex(123); //将十进制转成十六进制 返回为一个字符串。
// 其他进制转十进制 同上3种
注意 除了10进制为数字,其他进制类型可以认为是字符串。
进制转换的人工计算
10进制转换为2进制
做法: 除2取余倒着写出所有余数。 详细解释: 讲一个10进制数字处理2,得到商和余数,如果商还大于等于2,则继续除以2,继续得到商和余数,以此类推,知道商为0为止,然后将前面的所有余数按倒序写出来就是对应的2进制数字。
10进制转换为8进制
做法: 除8取余倒着写出所有余数。 详细解释: 讲一个10进制数字处理8,得到商和余数,如果商还大于等于8,则继续除以8,继续得到商和余数,以此类推,知道商为0为止,然后将前面的所有余数按倒序写出来就是对应的8进制数字。
10进制转换为16进制
做法: 除16取余倒着写出所有余数。 详细解释: 讲一个10进制数字处理16,得到商和余数,如果商还大于等于16,则继续除以16,继续得到商和余数,以此类推,知道商为0为止,然后将前面的所有余数按倒序写出来就是对应的16进制数字。
其他进制换为10进制的做法:
一种数字的大小和"数字权值"有关。例如:
例如: 对一个10进制数字: 1234,可以这样去理解它的大小:
1234 = 1*103 + 2*102 + 3*101 + 1*100 = 1000+200+30+4 ; 对于103,102,101等,称为"权值",每个位的权值是不同的。
对于10进制,每个位上权值都是10的几次方。
对于16进制,每个位上权值都是16的几次方。
对于8进制,每个位上权值都是8的几次方。
浮点类型
浮点数的两种表示形式
1.常规写法:
$v1 = 123.456;
2.科学计数法:带一个特殊符号"E"
$v1 = 123.456E3; //123.456乘以10的3次方。 即使为123456,但是仍然是浮点类型。
浮点数使用的细节
1.浮点数不应该进行大小比较
- 所有数字,最终的表示形式,都是2进制!!!
- 大多数浮点数的2进制形式,不能完全表达准确。最终只能以很高的精度接近理论值。
- 因此,浮点数比较是不可靠的。
以上说明:php
中输出其实是做了一定的处理之后的显示结果,而js得输出是计算机算出的结果。 java
中float
上限为小数点后六位,double
为小数点后15位。
小数转二进制的做法:乘以2并顺序取整数部分
//将小数0.6125转换为2进制小数形式:
//小数转二进制的做法: 乘以2并顺序取整数部分。
0.6125 整数
*2
=0.225 1
*2
=0.45 0
*2
=0.9 0
*2
=0.8 1
*2
=0.6 1 --> 已经开始循环
*2
=0.2 1
*2
=0.4 0
*2
=0.8 0
*2
=0.6 1 --> 循环起始点
*2
=0.2 1
......
其最后结果: 0.1001 1100 1100 1100 ....(float 最多就是32个)
如果小数位0.625 那么就不需要循环可以除开。 为:0.101
当整数运算的结果超出整数的范围后,会自动转换为浮点数(了解)
获取一个数据(变量)的类型的函数:
getType($变量)
; 返回的是该类型的名字(字符串);var_dump($变量)
; 会输出该变量的类型,数据内容,(以及长度)。
int类型最大数字为10位数字,max=2147483647≈21E
字符串
php中字符串的定义有四种形式:
形式 1:双引号字符串
* $str1 = "字符串内容";
- 内容中可能使用到的转义符:
\\
,\'
形式 2: 单引号字符串:
$str2 = "字符串内容";
- 内容中可能使用到的转义符:
\\
,\'
,\n(换行符)
,\r(回车符)
,\t(tab符)
,\$ 取消了在双引号字符串中的php的变量名起始声明含义
形式 3: 双引号定界符字符串
$str3 = <<< "标识符A"<br/>字符串内容<br/>标识符 ;
形式 4: 单引号定界符号字符串
$str4 = <<< '标识符B' <br/>字符串内容<br/>标识符
上处3 4形式结束一行,只能出现该标识符本身以及一个分号,其他什么都不允许出现。
布尔类型
单词bool,boolean。 只有true和false。
需要知道以下数据是被当做false的存在。
0,0.0, “", “0”, null, array(), false,还有一个为定义变量。
参考: 手册 –> 附录 –> php类型比较表
类型转换
自动转换
在任何运算中,如果需要某种类型的数据,而给出的数据不是该类型,通常会发生自动转换。将该类型转换为目标需要的类型。
例如: octdec($x),bindec($x),hexdec($x); 这里的$x必须是字符串如果不是就会自动转换。
$n1 = 1+"2"; //3
$n2 = "1"+"2"; //3
//php中,算术运算符,就只能对数值进行计算,即使是字符串会强转为数字,如果不是数字那么强转结束,只保留从开始成功的一部分。
$n3 = 1 +"2abc" //3
$n4 = 1 +"abc2" //1
$n5 = 1 +true; //2
$n6 = 1 +false; //1
强制转换
自动类型转换是由"运算符"或类似运算符的语句来决定。
强制类型同java一样,在前面做类型声明强转。
通常的转换类型有,int
,float
,string
,bool
,array
,object
。
这种强转类型,并不能改变该变量的本身数据或类型。对应,有一个语法是直接改变本身的数据以及类型:
settype
(变量名,要重设的值);
类型相关的函数
var_dump()
用于输出变量的“完整信息”,几乎只用于调试代码。
getType($变量名)
获取给变量能够的类型名字,返回的是一个表示该类型的字符串。如“string”,“bool”
setType($变量名,“目标类型”)
将该变量强制改变为目标类型
isset(),empty(),unset()
之前有介绍。
is_XX类型() 系列函数
判断$x是否是一个整数类型
is_int($s)
; //判断是否是一个整数类型is_float($s)
;- …
is_numeric($s)
;//判断是否是一个数字is_scalar($s)
; //判断是否是一个标量类型
运算符
算术运算符
符号 + - * / %
- 在php中只是针对数字进行运算
- 如果运算符两边有不是数字的数据,就会自动转换为数字
- 其中取余运算%,它只会针对整数进行运算如果不是,会自动截取为整数。
自增自减运算符
- 常规: 对数字进行自加1或自减1.
- 字符串: 只能自增,且自增的效果就是 下一个字符 ,只能针对字母或数字进行自加。
- 布尔值递增递减无效
- null递减无效,递增结果为1
逻辑运算符
php中的&&
||
支持短路现象,相当于java中的 单&
和双&
的区别,如果判断条件1可以得出结论,后面的判断条件不再执行。
字符串运算符
- 符号为
.
,也演出了另一个.=
- 如果两边不是字符串,就会自动转换为字符串在连接。
位运算符
基础规定
1 位是什么? 就是二进制数字的每一个 位,一个整数数字,有32个位构成。
2 位运算符仅仅针对整数进行的运算符。
3.位运算符有如下几个
&
:按位与|
:按位或~
:按位非 按位取反^
:按位异或
4.位运算符的基本语法规则。
按位与基本规则:
* 1 & 1 --> 1
* 1 & 0 --> 0
* 0 & 1 --> 0
* 0 & 0 --> 0
按位或基本规则:
* 1 | 1 --> 1
* 1 | 0 --> 1
* 0 | 1 --> 1
* 0 | 0 --> 0
按位非基本规则:
* ~ 1 --> 1
* ~ 0 --> 1
按位异或基本规则:
* 1 ^ 1 --> 0
* 1 ^ 0 --> 1
* 0 ^ 1 --> 1
* 0 ^ 0 --> 0
原码,反码,补码
原码:是一个二进制数字,从数学观念上来表达的形式,其中,我们规定: 一个数字的最左边是符号位,0表示整数,1表示负数。
反码:整数的反码不变,负数的反码:符号位不变,其他位取反。
补码:整数的补码就是本身,负数补码:符号位不变,其他位取反后+1—-既反码+1
灯泡判断法
status 所有灯泡状态 d1,d2……dx 每个灯泡
1. 查看某个灯泡是否打开: (status & d1)是否大于0
2. 打开某个灯泡: status | d1
3. 关闭某个灯泡: status & (~d1)
数组运算符
- +:数组联合,也可以理解为数组串联。将游标的数组项合并到左边数组的后面,得到一个新数组,如果有重复键,则结果以左边的为准。
- ==:如果两个数组具有相同的键名和键值(可以顺序不同类型不同),则返回true。
- ===:如果两个数组具有相同的键名和键值并且顺序类型都一样,则返回true。
错误控制运算符@
通常就用在一个地方
$link = @mysql_connect("数据库服务器地址","用户名","密码");
作用是:如果该链接数据的语句失败,则屏蔽该失败的错误提示。
循环语句特殊使用
php中,break
和continue
有扩展的使用功能,可以中断更多层的循环。break 正整数n;
循环的层,值得是从当前中断语句(break,continue)算起,往代码的外部属循环个数,就是层数。
for(){ //循环1
for(){ //循环2
for(){ //循环3
break 2; //会中断2:就是指中断2层
//循环3为第一层,循环2为第二层,循环3为第三层。
}
}
}
控制脚本执行顺序
die(字符串)/exit(字符串)
输出该字符串后,立即停止php的执行!既后续程序不再执行,包括后续的其他所有php和html代码部分。
exit是die的同义词。也可以不加字符串,而是直接停止。
sleep($n)
让程序停止运行指定的秒数。然后等待过了那个时间后,就继续运行。