PHP入门
PHP基本语法
PHP代码被<?PHP ?>所包裹,变量名以$开头,每条代码以 ; 号结尾
变量名区分大小写,一般以字母或下划线开头,不可以用数组开头
<?PHP
$name = 'Mary';
?>
变量与基本数据类型
PHP中的数据类型
- int 整型
$num = 120;
- float 浮点型
$num = 1.2;
- string 字符串
包含在双引号或单引号中的内容
$str = 'name';
- array 数组类型
用来存储一组数据,如用来存储一个序列或者一个人的基本信息
$arr = array(1,2,3,4,5,6);
使用以上方法定义的数组取值时通过数组元素下标来取值,数组下标是从0开始的,如$arr[1]
的值为2;
$arr = array('name' => 'Mary', 'age' =>22, 'sex' => 'F') ;
使用以上方法定义的数组取值时通过数组键来取值,如$arr['name']
值为Mary。
混合定义的数组中,取值时有所不同
$arr=array('b','ad', 4 => 'Mary', 'abc' ,'def');
当取数组中最后一个元素的值时,若使用索引为$arr[3]
会取不到数组中最后一个元素,由于他前边被定义了键4,所以若要取最后一个元素的值需要使用$arr[6]
来取值。 - bool 布尔类型
false和true,即真或假$bo = true;
- object 对象类型
使用new关键字创建的对象,如创建一个mysql连接的对象
$conn = new mysqli('server','user','password');
- resource 资源型
使用特殊函数得到,如文件资源
$f = fopen('filename','r');
变量的定义与使用:
$name = 'Mary';
echo "name的值为 $name !\n";
echo "name的值为{$name}!\n";
echo 'name的值为'.$name.'!'.PHP_EOL;
echo 'name的值为$name\n';
上例中定义了一个名为name,值为Mary的变量
在PHP代码中,变量的定义以 $ 符号开始,每行代码以封号 ’ ; ’ 结束
echo 是一个输出关键字,输出$name的值
在使用变量是有几个需要注意的地方:
- 当变量和其他字符连接在一起输出时,在变量名后需要有空格和其他字符分隔开来,否则PHP无法识别变量,会将变量和与连接在一起来的字符串作为整体作为字符串输出。
- 若需要将变量连接到字符串中但又不想和其他字符间有空格,可以向第3行一样,使用花括号 { } 将变量包裹起来;或者如第四行一样,使用 . 将字符串与变量连接起来,其中PHP_EOL是PHP中的常量\n,即可以输出换行符。
- 在定义变量和使用变量时,单引号包裹的内容,特殊含义的字符会被转义,即只会表示其字符本身,而不会有特殊含义,如
$n = '\n';
该变量只表示\n字符本身,而不是换行。
如图为以上代码输出:
变量的类型
可变变量
$a = 12;
$b = 'a';
$c = 'b';
echo '$$b值为:'.$$b.PHP_EOL;
echo '$$c值为:'.$$c.PHP_EOL;
echo '$$$c值为:'.$$$c.PHP_EOL;
以上代码存在这样的关系$b变量的值为$a变量的名称,$c的值为$b变量的名称;
$$b意为取$b得值作为a变量名,求$$b=$a=12
$$$c意为取$c的值作为变量名,求$$$c=$$b=$a=12
输出结果如图:
外部变量
可以获取用户提交信息等,可以在代码文件任意位置访问
以下几个变量数据类型皆为数组
变量名 | 作用 | 使用 |
---|---|---|
$_GET | 获取用户通过GET方式提交的数据 | $_GET[‘name’] |
$_POST | 获取用户通过POST方式提交的数据 | $_POST[‘name’] |
$_REQUEST | 获取用户通过GET或POST方式提交的数据 | $_REQUEST[‘name’] |
$_FILES | 获取用户上传文件信息 | $_FILES[‘f’] |
$_SERVER | 获取服务器或用户相关信息 | $_SERVER[’'REMOTE_ADDR] |
$_COOKIE | 获取用户提交的cookie | $_COOKIE[‘user’] |
$_SESSION | 获取session会话信息 | $_SESSION[‘user’] |
全局变量
即可以全局访问的变量,可以在当前代码文件除函数内部外任意位置访问的变量
若需要在函数内部访问,需要使用 global 关键字声明变量
$name = 'Mary';
function get_name(){
echo '$name的值为:'.$name.'!';
}
get_name();
echo '函数外部 $name的值为:'.$name.'!'.PHP_EOL;
如图:
函数内未使用global声明全局变量,在函数内部无法访问到全局变量$name,输出为空:
使用 global 声明全局变量
$name = 'Mary';
function get_name(){
global $name;
echo '函数内部 $name的值为:'.$name.'!'.PHP_EOL;
}
get_name();
echo '函数外部 $name的值为:'.$name.'!'.PHP_EOL;
如图:
函数内使用global声明全局变量,在函数内部可以访问到全局变量$name
局部变量
只能在函数内部访问
function get_name(){
$name = 'Mary';
echo '函数内部 $name的值为:'.$name.'!'.PHP_EOL;
}
get_name();
echo '函数外部 $name的值为:'.$name.'!'.PHP_EOL;
静态变量
在函数内使用static声明静态变量
函数内的局部变量会在函数调用结束后被释放,下一次调用函数时局部变量初始化,不保存上次调用的执行结果。
在使用static声明静态变量后,函数调用后会保存该变量的值,下一次调用仍使用上一次调用结束时的值。
静态变量的使用:
C语言中的strtok(char*,const char*)函数通过静态函数保存了字符串分割的指针位置,方便下次调用再次进行分割字符串
function get_num(){
$s=1;
$s++;
echo $s.PHP_EOL;
}
get_num();
get_num();
如图为局部变量,两次调用函数的输出结果
function get_num(){
static $s=1;
$s++;
echo $s.PHP_EOL;
}
get_num();
get_num();
如图为静态变量,两次调用函数的结果
常量的定义与使用
常量不可更改,使用define(‘NUM’,23) 来定义,常量通常大写
常用的魔法常量:
//返回执行代码所在的行号
echo __LINE__;
//返回执行代码所在的文件完整路径
echo __FILE__;
返回执行代码所在的文件目录
echo __DIR__;
输出语句的使用
- echo 输出语句,可以输出多个字符串,变量,以及函数返回值
$name = 'Mary';
echo phpinfo();
echo '为什么?','怎么做?';
echo $name;
- print 一次只能输出一个字符串,变量,函数返回值,执行效率也没有echo高
print $name;
print phpinfo();
print 'why?';
- print_r() 可以输出变量,字符串,主要可以用它输出数组
$arr = [1,23,4,5];
print_r($arr);
//函数输出
Array
(
[0] => 1
[1] => 23
[2] => 4
[3] => 5
)
- var_dump() 不光可以输出变量,字符串,数组,还可以输出他们的数据类型
$arr = [1,23,4,5];
var_dump($arr);
//函数输出
Array
(
[0] => 1
[1] => 23
[2] => 4
[3] => 5
)
流程控制语句
流程控制语句用于控制程序执行流程,根据不同的条件执行不同的代。
判断括号中的条件,若条件为真,执行花括号中的代码,若为假,跳过花括号中的代码继续往下执行。
在PHP中:
true/TRUE,非0值,非空值为真
false/FALSE,0,null,空值(空数组,空字符串’’)
流程控制语句格式:
- if 语句
//1.可以写单条if判断
if(条件){
}
//2.if...else组合,条件成立输出1,否则输出0
if(条件){
echo 1;
}else{
echo 0;
}
//3.if...elseif...elseif...else,elseif可以嵌套多层
if(条件1){
echo 1;
}elseif(条件2){
echo 2;
}elseif(条件3){
echo 3;
}else{
echo 0;
}
三元运算符的使用
$n = 3>4 ? 'a':'b';
该语句同
if(3>4){
$n = 'a';
}else{
$n = 'b';
}
- Switch语句
switch 语句只需要case 判断的内容和switch($str) 中的$str一致,就执行case之后的代码内容,直到遇到break,或者switch代码块结束,若$str和任何case判断都不匹配,执行default中的代码。
$str = '下雨';
switch($str){
case '下雪':
echo '多加棉衣';
case '下雨':
echo '需要带伞';
break;
case '不下雨':
echo '不需要带伞';
break;
default: echo '啥啥都没,要什么自行车!';
}
代码解析:
以上代码,输出为:需要带伞
若$str = ‘下雪’;输出为:多加棉衣需要带伞,由于第一个case没有break,所以他会继续向下执行,直到遇到break或者执行到switch代码块结束。
循环语句
循环语句分为4种:
- while循环
while(条件){
}
- do…while
do{
}while(条件)
do…while语句与while语句的区别:
do…while语句先执行do语句代码块中的内容,然后执行while语句进行判断是否进入下一次循环;
所有do…while语句中do语句的代码块至少执行一次
- for
//for循环中先通过表达式1设置一个初始值
//然后判断是否符合循环条件
//若循环条件符合,在执行完当前循环后,执行表达式2的操作
//其中表达式1可以写在for循环之前,表达式2可以放for循环循环体内,但是for循环的格式要报错不变,for(;条件;)
for(表达式1;条件; 表达式2){
}
- foreach
$arr = array(1,2,'name'=>'Mary')
//用来遍历数组,输出$value为数组中的每个元素的值
foreach($arr as $value){
echo $value;
}
//输出$value为数组中的每个元素的键及其值,普通数组的键为其索引值
foreach($arr as $key => $value){
echo "$key = $value"
}
常用在循环中的几个关键字,continue跳过之后的执行代码,break跳出当前循环
$num = 0;
while($num<8){
$num++;
if($num==2){
echo'跳过以下代码'.PHP_EOL;
continue;
}elseif($num==4){
echo '跳出循环'.PHP_EOL;
break;
}
echo '$num = '.$num.PHP_EOL;
}
箭头所指为循环中因continue和break而未输出的内容
函数创建与调用
函数由函数名,形参,函数体组成,通过function关键字创建
函数调用,使用函数名,传递正确的参数即可调用
$name = 'Mary';
$age = 12
function func($A,$B){
echo $A.PHP_EOL;
echo $B.PHP_EOL;
return 0; //返回值,调用者可使用变量接收返回值
}
$ret = func($name,$age);
常用运算符
算术运算符
+ 加 - 减 * 乘 / 除 %取余
在编写代码时若某变量做自增和自减运算,可以编写为$num++
或$num--
$num++ = $num+1
,$num-- = $num-1
自增和自减还可以写++$num
和--$num
$num++
和++$num
的区别:这两种自增的写法单独写的时候没有区别,但是在自增的同时进行赋值的话会有一些区别;
$a = $num++
会先执行$a = $num
的赋值操作,然后做$num+1
操作
$a = ++$num
会先执行$num+1
的赋值操作,然后做把$num+1
的值赋值给$a
逻辑运算符
逻辑运算符常用在条件判断中
- and 与运算,必须所有条件成立才为真
- or 或运算,只要有一个条件为真即为真
- ! 非运算取反
常用函数
判断变量类型的函数
is_int(); 判断是否时整型数据
is_bool(); 判断是否时bool类型
is_float(); 判断是否时浮点类型
is_string(); 判断是否时字符串类型
is_array(); 判断是否时数组
is_object(); 判断是否是对象类型
is_null(); 判断是否为空类型
is_resource(); 判断是否是资源类型
is_scalar() ; 判断是否为标量,即是否是整型、浮点型、字符串、布尔型
is_numeric(); 判断是否为数值型,如:‘123’为数值型
is_callable(); 判断是否为函数
数值计算函数
//返回随机数
rand();
mt_rand();
//计算绝对值,返回29
abs(-29);
//舍去小数,返回12
floor(12.9);
//浮点数取余,返回0.1
fmod(7.6,2.5);
//求2的3次方,返回8
pow(2,3);
//返回平方根,3
sqrt(9);
//返回最大值4
max(1,2,3,4);
//返回圆周率
pi();
字符串处理函数
字符串编码:
iconv(原字符串编码,转换输出的字符串编码,字符串)
- 去除字符中的字符
//去除两端多余的空格,换行,制表符等,可以通过第二个参数指定去除的内容
trim(' asd ',' \t\n\r');
rtrim(); //去除右端指定字符
ltrim(); //去除左端指定字符
- 分割字符串
//分割字符串,以几个字符为一组进行分割,返回数组
str_split('abcd',2);
//分割字符串,若第二次需继续分割,则只需传递分割字符即可,如字符串分割完毕,返回false
$str = 'a,b,c,d';
$c = strtok($str,',');
while($c){
echo $c;
$c = strtok(',');
}
//通过分割符将字符串分割,返回数组
explode(',','a,v,sa,asd')
- 字符串大小写转换与填充排版
//填充字符串,根据指定字符串长度使用指定字符进行填充,默认向右填充,使用四个参数指定方向
str_pad('abc',10,'0',STR_PAD_RIGHT);
//将字符串全部转换为小写
strtolower('ABC');
//将字符串全部转换为大写
strtoupper('abc asd');
//将字符串首字母转换为大写
ucfirst('abc asd');
//将字符串每个单词首字母转换为大写
ucwords('abc def');
- 字符串连接
//使用 - 连接数组中每个元素
join('-',$arr);
- 字符串截取
///表示字符索引为1的位置截取两个字符,字符索引从0开始
substr('abcd',1,2); //返回bc
substr('abcd',2,-1); //返回c
//返回指定字符串在指定字符串中到结束位置的字符
subchr('abcdef','c'); //返回cdef
subrchr('abcdef','c'); //返回cdef
- 字符串替换
//将字符串qwe中的q替换为c
str_replace('q','c','qwe');
//不区分大小写进行替换
str_ireplace('q','c','Qwe');
- 字符统计
//统计as在字符串asdasdasd中出现的次数,返回3
substr_count('asdasdasd','as');
//返回字符串字节长度,返回3
strlen('asd');
- 获取字符在字符串中的位置
//返回b第一次出现的abcdb字符串中的位置,返回1
strpos('abcdb','b');
//返回b第一次出现的abcdb字符串中的位置,返回1,不区分大小写
stripos('aBcdB','b');
//处理多字节字符,获取子串在字符串中的位置
mb_strpos();
- 安全字符处理
//把字符转换为html实体
htmlentities('<script>');
//去除成对<>内的内容,若只有一个<则<后的字符会全部去除,返回asd
strip_tags('<asdfasd>asd');
//在指定字符前添加转义字符\,返回\ab\cd
$str = addcslashes('abcd','ac');
//去除转义字符\
stripslashes('abc\n');
- ASCII字符转换
//返回ascii码对应的字符
chr(97);
//返回字符对应的ascii码
ord('a');
- 字符串比较
//不区分大小写比较两字符串,返回0
strcasecmp('Ab','aB');
//区分大小写比较两字符串,返回1
strcmp('Ab','ab')
- 其他字符串处理函数
//将字符串解析为数组中的元素,使用键值的方式,多个元素使用&符号连接
parse_str('name=mary&age=22&sex=F',$arr);
//将字符串打乱返回
str_shuffle('abcde');
//字符串拼接,返回格式化拼接好的字符串
$str = sprintf('%d %s',1,'c')
数组函数
array_shift();弹出数组中第一个元素
array_pop();弹出数组中最后一个元素
$arr = [1,'a'=>'97','c'];
echo array_shift($arr).PHP_EOL;
echo array_pop($arr).PHP_EOL;
print_r($arr);
输出结果:
1
c
Array
(
[a] => 97
)
array_unshift();压入元素到数组第一个
array_push();压入元素到数组最后一个
$arr = [1,2];
array_unshift($arr,'a');
array_push($arr,'b');
print_r($arr);
输出结果:
Array
(
[0] => a
[1] => 1
[2] => 2
[3] => b
)
range();返回一个包含指定范围的数组
print_r(range(1,4));
输出结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
array_merge();将多个数组合并为一个数组,两数组相加有也可以合并数组
$arr1 = [1,2];
$arr2 = ['name'=>'Mary'];
print_r(array_merge($arr1,$arr2));
输出结果:
Array
(
[0] => 1
[1] => 2
[name] => Mary
)
in_array();检查数组中是否有某元素
$arr = [1,2,'name'=>'Mary'];
var_dump(in_array('Mary',$arr));
输出结果:
bool(true)
array_rand();返回数组中一个随机的值(键)
$arr = [1,'name'=>'Mary','age'=>'22',3];
print_r(array_rand($arr));
输出结果:
age
array_unique();个数组去重
$arr = [1,2,1,'name'=>'Mary','age'=>'22',3];
print_r(array_unique($arr));
输出结果:
Array
(
[0] => 1
[1] => 2
[name] => Mary
[age] => 22
[3] => 3
)