三天学会PHP系列-第二天-PHP基础

1.PHP在WEB开发中的应用

  1. PHP超级文本预处理器
  2. PHP是一种在服务器端执行的嵌入HTML文档的脚本语言
  3. PHP是目前最流行的网站开发语言(B/S结果)
  4. PHP独特的语法混合了C、Java、Perl以及PHP自己创新的语法
  5. 支持几乎所有流行的数据库以及操作系统

2.创建一个PHP脚本语言
PHP的开发步骤:

  1. 使用编辑器创建一个包含源代码的文件
  2. 将文件上传到web服务器是哪个
  3. 通过浏览器访问web服务器运行程序

这里我用的环境是phpstudy
首先建立一个php文件


	
		
		One
	
	
		
	

打开浏览器查看
在这里插入图片描述

我们在进入看看phpinfo里什么东西


	

显示服务端的详细信息
三天学会PHP系列-第二天-PHP基础_第1张图片

3.PHP语言标记

	
		

//是结束符来退出php模式,这就是PHP脚本

文件后缀名为.php结尾,上传web服务器的文档根目录,访问web服务器的php文件,就可以运行php文件

PHP语言嵌入HTML中的位置


	
		
		One
		
	
	>	#嵌入到html标签属性中
		

"">This is true

This is false

//在HTML中更高级的分离技术

4.指令分隔符“分号"

  • 在程序使用结构语句例如流程控制、函数与类的定义等,用大括号来标记代码块,在大括号后不要用分号
  • PHP需要在每个指令后用分号结束
  • 在PHP中右括号(?>)前的分行不是必选的,就是

5.程序注释
对阅读代码的人来说,注释其实就相当于代码的解释和说明。注释可以解释脚本的用途、脚本编写人、为什么要如此编写代码、上次修改的时间等等。

PHP支持C、C++和Shell脚本风格的注释如:

  • //… … 单行注释
  • /*… … */多行注释
  • #… … 脚本注释
    程序员在编程时使用注释是一种良好的习惯,优点
  • 写帮助文档
  • 调试程序
    注意:注释要写在代码上面或是右边

6.程序中使用空白的处理
一般来说空白符(空格、Tab制表符、换行)在PHP中是不会有空格换行tab的
如果在echo “2222 22222”,则只当一个空格处理
可以使用echo "< hr />"来表示换行

7.变量
7.1变量的声明
变量是存放数字、文本、数组,存放PHP中所有类型的
PHP是一种非常弱的类型语言,其他强语言还要给变量指定类型,PHP会由上下文自动的判断类型

PHP的变量声明是以$符开始的,后面跟大小写字母,数字下划线,但不能以数字开头,也不能以空格开头


可以使用函数unset()释放指定的变量,isset()函数检测变量是否设置,empty()函数检查一个变量是否为空


	
		
		One
		
	
	
		
	

7.2变量的命名

由字母或者下划线开头,后面跟上任意数量,数字,或者下划线
变量的名称对大小写敏感的
但内置结果和关键字以及用户自定义的类名和函数名都是不区分大小写的。例如:echo、while、function名称等。


8.变量的类型
8.1类型介绍
数据类型:
PHP支持8种原始类型

  • 布尔型
  • 整型
  • 浮点型
  • 字符串
    两种复合类型:
  • 数组
  • 对象
    最后是两种特殊类型:
  • 资源
  • NULL

在PHP中,变量类型不是由程序员设定的,确切地是根据该变量使用的上下文在运行时(即变量的值)决定的

使用函数var_dump()查看表达式的值和类型


8.2布尔值

  • 这是最简单的类型.boolean表达了真值,可以为TRUE或FALSE,即为真或假
  • 当其他类型转换boolean类型,下面值被认为是FALSE:
    • 布尔值FALSE
    • 整型值0
    • 浮点型值0.0
    • 空白字符串和字符串"0"
    • 没有成员变量的数组
    • 没有单元的对象
    • 特殊类型NULL(包括未尚定义的变量)
      其他值都认为是TRUE

8.3整型

整型可以是十进制,十六进制或八进制符号制定,前面可以加上可选的符号(-或者+)代表数值的正负


整数值有最大的使用返回,这与平台有关,32位范围:-2147483648~2147483647,PHP不支持无符号整数。如果超出则变成float型

$large_number=214783648;
var_dump($large_number);			//输出:float(2147483648)

8.4浮点型

浮点数就是包含小数部分的数
最大值是1.8e308具有14位十进制数字的精度


8.5字符串

语法:
单引号’’,单引号是不解析变量
双引号"",双引号会解析变量
遇到单引号服务端会快一点,不会去想他会不会有变量

$a='_123';
$b="bb$a";			//$b输出则是bb_123

$c='bb$a'	;		//$c输出则是bb$a

如果要输出单引号怎么办?
使用转义符转义

$a=b\'b_123;
echo $a;				//输出b'b_123

转义符

序列				含义
\n				换行
\r				回车
\t				制表符
\\				反斜线
\\$				美元符号
\"				双引号

数组
实际就是一个有序图,映射关系,有个values映射到keys的类型
PHP中可以使用多种方式构建一个数组
用array()新建一个array,他接受一定数量用逗号分隔的key=>value参数对

语法结构:

//key可以是integer或者string类型
//value可以是任何值
$arr = array('name'=>‘张三’,‘sex’=>'男','age'=>18)

9.PHP的运算符
运算符是可以通过给出一或者多个值,来产生另一个值的结构就是运算符
有三种类型的运算符:

  • 一元运算符,只运算一个值,例如!(取反运算符)或++(加一运算符)
  • 二元运算符,有两个操作数,PHP支持的大多数运算符都是这种
  • 三元运算符:?:。他应该用来根据一个表达式在另两个表达式中选择一个,而不是用来两个语句或程序路径中选择,把整个三元表达式放在括号里是个好主意

算术运算符
三天学会PHP系列-第二天-PHP基础_第2张图片

$num1 = 12;
$num2 = 20;
$sum = $num1 + $num2;			//+-*/ % 
echo $sum;
echo "
"; $num1++; echo $num1;//$num1+1 $num2--;//$num2-1; echo "
" ++$num1//指令执行之前,先执行++,--同理

9.2字符串运算符
有两个字符串运算符:

  • 第一个是连接运算符("."),它返回其左右参数连接后的字符串
  • 第二个是连接赋值运算符(“.=”),他将右边参数附加到左边的参数后。

9.3赋值运算符
三天学会PHP系列-第二天-PHP基础_第3张图片


三天学会PHP系列-第二天-PHP基础_第4张图片

$num1 = 1;
$num2 = '1';
if($num1 === $num2){
	echo “相等”;
}else{
	echo "不相等";				//三个等号输出不相等,两个输出相等
}

9.4逻辑运算符
三天学会PHP系列-第二天-PHP基础_第5张图片

$num1=5;
$num2=4;
if($num1<6 && $num2 >1){
	echo "成立";
}else{
	echo "不成立";
}
if(!$num1 <4){
	echo "成立";				//成立
}else{
	echo "不成立";
}

三目运算符
条件 ? (真)结果1 : (假)结果2

//empty 如果没有值为真,如果有值则为假
//isset 如果有值则为真 如果没有值则为假
$a = empty($_GET['name'])? "1" : "$_GET['name'];	//如果为空则为真,返回1,如果不为空返回请求内容
$b = isset($_GET['name'])? "$_GET['name']" : "不存在"

*流程控制结构 *
1.分支结构

  • 顺序结构(程序从上往下依次执行)
  • 分支结构(选择结构)
  • 循环结构

1.1单一条件分支结构(if)
单一条件语句:

if(条件表达式){
	语句组;
	//语句组为条件语句时可省略"{}".
}

当条件表达式的值为真(true)时,PHP将执行语句组,相反条件表达式的值为假(false)时,PHP将不执行语句组,忽略语句组执行下面的语句

 100){
		echo "这个太贵我不买了";
	}
	if($price <=100){
		echo "这个价格还可以!买了!"
	}
?>

1.2双向条件分支结构(else从句)
if…else语句:

if (条件表达式){
	语句组1
}else{
	语句组
	//语句组为单条语句时可省略”{}“
}

if-else条件判断与if条件判断类似,所不同的是,if-else 语句的条件表达式值为真(true)时,会执行if的本体语句(语句组1),而条件表达式为假(flase)时,则执行else的本体语句(语句组2)

 100){
		echo "这个太贵我不买了";
	}else{
		echo "这件衣服还可以!买了"
	}

1.3多向条件分支结构(elseif从句)
elseif子句:

if(条件表达式){
	语句块1
}elseif(条件表达式1){
	语句块2
}elseif(条件表达式n){
	语句块n
}else{
	语句块n+1
}

下面演示:


1.4多向条件分支结构(switch语句)
switch-case语句语法:

switch(表达式){
	case 值1:
		语句序列1;
		break;
	case 值2;
		语句序列2;
		break;
	...
	defalut
}

演示:

$week=3;
switch($week){
	case 1:
		echo "今天星期一";
		break;
	case 2:
		echo "今天星期二";
		break;
	case 3:
		echo "今天星期三";
		break;
	case 4:
		echo "今天星期四";
		break;
	case 5:
		echo "今天星期五"
		break;
	defalut:
		echo "周末放假";
		break;
}

当碰到switch条件判断时,他会取出值,然后跟case列出的值逐一比较,如果数值不符合,则往下一个case传值,如果数值复合则执行case中的语句,再碰到break语句即跳出switch条件判断,如果条件都不符合,则会执行default中的语句

switch语句注意事项:

  • switch语句与if语句不同,他仅能判断一种关系:是否恒等
  • case子句的常量是整型常量、字符型常量、表达式或变量
  • 在同一个switch中,case子句的常量不能相同,否则第二个值永远无法匹配到
  • case和defalut子句后面的语句序列允许由多个可执行语句组成,且不必用{}括起来,也可以为空语句。
  • switch可以省略break语句和default子句。省略会改变流程
  • break是跳出循环的意思,执行除循环下面的代码

2.while语句
while循环语法:

while(表达式){
	语句或语句序列
	... ...
}

当while循环语句表达式的结果为真,程序将反复执行同一段程序:循环体(while中的语句或语句序列),直到满足一定条件(表达式的结果为假)后才停止该段程序。

演示:

//求1到100的累加
$i = 1;
$sum=0;
while($i<=100)
{
	$sum+=$i;
	$i++;
}
echo $sum

3.do…while循环
基本格式:

$i=1
do{
	语句或语句序列
	... ...
}while()

程序会先执行do语句体的语句(循环体),然后再检查表达式(循环控制语句)的值,如果符合条件式(值为真)就再进行do语句体重的语句,直到条件不符合为

求1到100的累加
$i=1;
$sum=0;
do{
	$sum+=$i;
	$i++;
}while($i<=100);
echo $sum;

4.for语句
基本格式:

for(表达式;表达式2;表达式3)
{
	语句或语句序列;
}

for循环语句中表达式1为循环初始条件;表达式2位循环控制条件;表达式3位控制变量递增;语句或语句序列为循环体
例子:

for($i=0;$i<10;$i++){			//i++在第一次循环的时候是不会执行i++
	echo "第{$i}次循环";
	echo "<\br>";
}
$i=1;
for(;;){
	if($i>10)
		break;
	echo "这是第$i次循环执行输出的结果";
	$i++;
}

特殊流程控制语句
1、break
我们在switch条件判断中,使用过break关键字,他会使得程序流程离开switch本体中语句,如果break用在for、while或do-while循环结构中,将会使得程序离开该层循环
2、continue
continue的作用与break有点类似,continue若使用在for、while或do-while循环结构中,当程序执行至continue时,之后的语句将直接被略过,而直接执行下一次的循环动作
3、exit
当前脚本只要执行到exit语句,而不管它在哪个结构中都会直接退出脚本。exit是一个函数,当前使用过的die()函数就是exit()的别名。可以带参数输出一条消息,并退出当前脚本
演示:

“//输出1234

for($i=1;$i<10;$i++){
	if($i==5){
		continue;
	}
	echo $i."
";//输出12346789 } echo "111111111111"; exit;//退出脚本下面都不执行 echo "111111111111"; ?>

函数
创建用户自定义函数

函数名能够以字母或下划线开头(而非数字)。
函数名对大小写不敏感。
语法:

function functionName() {
  被执行的代码;
}

实例:

function sayhello(){
	echo "hello word";
}
sayhello();	//调用函数

实参和形参

什么是传参?
传值,是把实参的值赋值给行参
那么对行参的修改,不会影响实参的值

function sayhello($name){		//括号里面的就是形参
	echo "say hello".$name
}
sayhello('lotus')		//lotus就是实参

静态变量

function demo(){
	$a =0;		//如果是静态 static $a=0
	$a++;
	echo $a;
}
demo();//1 怎么调用都是1,如果是静态则调用$a这数不变
demo();//1	如果是静态$a则是2,静态则继续调用该函数会不断增1

函数内无法访问外部变量
使用global可以让外部可以使用到内部变量

$mingzi ="xiaodong";
function demo($name,$edu){
	global $mingzi;		//使得内部变量 可以给外部调用
	$mingzi = 123;		
	echo $mingzi;		//这里会输出为空,因为$mingzi不存在,则无法调用外面的变量
	echo 'hello'. $name;
}
demo('mumu',Null);
echo $mingzi;

使用$GLOBALS[‘变量名’]可以使得外部的变量内部也可以使用

$mingzi = 'xiaodong';
function demo(){
	echo $GLOBALS['mingzi']; //也可以这样定义$GLOBALS['mingzi']='123'
}
demo() //输出xiaodong

return函数
返回一个值给定义的函数


PHP中的数组与数据结构
1.数组的概述
PHP中的数组实际上是一个有序图,图是一种把values映射到keys的类型
通俗来说数组就是一组数据,数据类型可以是整型可以是字符串,也可以是数组作为一个值
什么说value是值的意思,keys是键的意思?
就像我们家的门牌号一样,你知道门牌号就能找到你的家,这是一种对应关系,也能像身份证,知道你身份证号也能找到你这个人

2.数组分类;
在PHP中有两种数组:索引数组和关联数组

  • 索引数组的索引值是整数,以0开始。当通过位置来标识东西时用索引数组
  • 关联数组以字符串作为索引值,关联数组更像操作表。索引值为列名,用于访问列的数据
id		姓名		年龄		爱好
1		张三		20		电脑

二、数组的定义
2.1直接赋值的方式声明数组

数组常用的赋值方式:
由于PHP属于弱类型数据,因此源代码中的数组并不需要经过特别的声明操作,直接将一组数值指定给某一数组元素即可,一般情况下数组的赋值有两种方式

直接赋值方式 如:

第一种:
string(5) "zhang"[1]=>string(4) "wang"{2}=>string(2) "li"[3]=>string(4)"zhao" }输出了非常详细信息
?>
第二种(一般怎么写):

2.2使用array()语言结构新建数组

第一种方式:
11,1=>"wang",3=>"zhao");
	var_dump($name2);//写上索引的方式
?>
第二种方式:

第三种方式

第四种方式
"wang","age"=>11,"sex"=>"nan");
	var_dump($person);
	echo $person["name"];
?>

2.1直接赋值的方式声明数组
直接赋值格式:
$数组变量名[索引值]=资料内容
其中索引值(下标)可以是一个字符串或一个整数。等价于整数(不宜0开头)的字符串值被当做整数对待。数组$array[3] 与$array[‘3’]是引用相同的元素,但是$array[‘03’]引用的另外不同的元素
2.2使用array()语言结构新建数组
array([key=>]value,…)
//key可以是integer或者是string
//value可以是任何值

一堆数组
	数组中索引值只有一个数组称为一维数组。这是在数组中最简单的,也是最常用的,上面的都是一维数组。

多维数组的声明

  • 二维数组的声明
  • 多维数组的声明方式及规则,与一维数组相同,例如

下面是二位数组声明演示:

array('w01','w02','w03','w04'),'zhuanye'='wangluo')
	var_dump($class)
	//输出 array(2) {["name"=>array(4) {[0]=>string[3] "w01" [1]=>string(3) "w02" [2]=>string(3) "w03" [3]=>string(3) "w03" [4]=>string(3) "w04"}["wangluo=>string=> string(7) "wangluo"]}
第二种方式
	$class1["name"][0] = "w01";
	$class1["name"][1] = "w02";
	$class1["name"][2] = "w03";
	$class1["name"][3]= "w04";
	$class1["zhuanye"]="wangluo";
	var_dump($class1);
?>

三、数组的遍历
3.1使用for语句循环遍厉数组


如果不是索引数组怎么办?
for循环是不能遍厉关联数组的

$a = array(1,2,‘four’=>4,5,7,8,3)
for($i=0;$i"//输出的是1 2 5 7 8 3

3.2使用foreach语句遍厉数组
for循环无法遍厉索引数组,所以要使用foreach进行遍厉数组
foreach循环结构:

  • foreach仅用于数组,有两种语法
  • foreach(array_expression as $value)
    …statement
  • foreach(array_expression as $key => $value)
    …statement
    第一种格式遍厉给定array_expression数组。每次循环中,当前单元的值被赋给$value并且数组内部的指针向前移一步
第一种方式:
$b =array("name"=>"zhang","age"=29,"sex"=>"man");
//foreach遍厉索引数组$a
foreach($a as $value){			//$value的名字是自己取的
	echo $value;
	echo "
"; } 第二种方式: $b =array("name"=>"zhang","age"=29,"sex"=>"man"); //foreach遍厉索引数组$a foreach($a as $key=>$value){ //$value的名字是自己取的 echo "键".$key."的值是".$value; echo "
"; }echo "
"

3.3联合使用list()、each()和while循环遍厉数组
array each(array array)
返回array数组中当前指针位置的键/值对并向前移动数组指针,键值对被返回为四个单元的数组,键名为0,1,key和value,单元0和key包含有数组单元的键名,1和value包含有数据
如果内部指针超过了数组的末端,则each()返回False
void list(mixed…)
他不是真正的函数,而是语言结构,list()用一步操作给一组变量进行赋值
注:list()仅能用于数组索引的数组并假定数字索引从0开始
在执行each()之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元,如果要再用each遍厉数组,必须使用reset()

"xiaoli","age"=>21,"sex"=>"nan");
		$row = each($a);
		var_dump($row);
		//array(4) { [1]=> string(6) "xiaoli" ["value"]=> string(6) "xiaoli" [0]=> string(4) "name" ["key"]=> string(4) "name" }发现只输出了一个键值对,如果再次输出就会往后
?>

list的作用就是把数组中的值赋给自己设的变量


可以使用while和list配合和each配合遍厉

第一种方法:
$c = array("name"=>"wang","age"=21,"sex"=>"nv");
while(list($key,$value) = each($c))
	echo $key."=>".$value
	echo "
"//"name" => "wang","age"=>21,"sex"=>"nv" 第二种方法: $d = array("name"=>"li","age"=>25,"sex"="yao") while($res=each($d)){ echo $res[0]."=>".$res[1];//echo $res['key']."=>".$res['value'] echo "
"; }

预定义数组
1.1 HTTP GET变量:$_GET
通过HTTP GET变量传递的变量组成的数组。是自动全局变量
可以直接接受url里的值
www.myblog.com/demo.php

var_dump($_GET);			//直接打印则是一个空数组,可以使用url直接接参数
www.myblog.com/demo.php?name=wang&age=33&sex=nan
//得到的数组是array(3) { ["wang"]=> string(0) "" ["age"]=> string(2) "33" ["sex"]=> string(3) "nan" }

一般我们是不会让用户自己去url拿参数,所以我们要在html中写上

第一种方式
拿参数
第二种方式(表单)

在这里插入图片描述
我们使用的$_GET POST REQUEST提交的都是数组
而我们使用的$GET[‘name’],则只是去数组键里的值,在提交表单中的name就是数组的(键)下标

1.2 HTTP GET变量:POST的方式
我们用post的方式是拿不到url里的参数
三天学会PHP系列-第二天-PHP基础_第6张图片


	
		
		One
	
	
		
	

如果只想拿name的值则加上索引值
var_dump($POST[‘name’]);

最后写一个表单


	
		
		One
	
	
		";
				echo "年龄:".$_POST['age'];
				echo "
"; echo "性别:".$_POST['sex']; } ?>
姓名:
年龄:
性别:

三天学会PHP系列-第二天-PHP基础_第7张图片
下次我们会学数据库,当用户提交的我们会存到数据库里面,同样用GET也是一样的

文件操作

fopen()的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式

$myfile = fopen("webdictionary.txt","r") or die("Unable to open file!");

三天学会PHP系列-第二天-PHP基础_第8张图片

读文件

$myfile = fopen("webdictionary.txt","r") or die("Unable to open file!");
echo Fgets($myfile);				//只读一行
echo Fread($myfile,1024);		//指定获取内容,1024字节
echo Filesize(./myfile.txt);			//获取文件字节,文件路径
Fclose($myfile);						//关闭资源

有许多种读取文件内容的方法

第一种
",$str);	//把回车符和换行符替换成空标签用于换行,$str是
fclose($fp);
}
?>
最简单的
echo 'type d:'

修改或添加文件内容


删除文件

unlink(webdictionary.txt)		//文件名

PHP全局变量
三天学会PHP系列-第二天-PHP基础_第9张图片
比较常用的

$GLOBALS:
$_SERVER:报头、路径和脚本位置的信息
$_SERVER['PHP_SELF'] 返回当前执行脚本的文件名
$_SERVER['SERVER_ADDR'] 返回当前运行脚本所在的服务器的 IP 地址
$_SERVER['SERVER_NAME'] 返回当前运行脚本所在的服务器的主机名
$_SERVER['REQUEST_METHOD'] 返回访问页面使用的请求方法
$_SERVER['REMOTE_ADDR']  返回浏览当前页面的用户的 IP 地址
$_SERVER['REMOTE_HOST'] 返回浏览当前页面的用户的主机名
$_SERVER['SCRIPT_FILENAME'] 返回当前执行脚本的绝对路径
$_SERVER['SCRIPT_NAME'] 返回当前脚本的路径
$_REQUEST:
    用于收集 HTML 表单提交的数据
$_POST:
$_GET:
$_FILES:
$_ENV:
$_COOKIE:
$_SESSION:

文件包含
在服务器执行 PHP 文件之前在该文件中插入一个文件的内容
这里我有两个文件
主文件main.php


其他文件 1.php,两个在同一目录


而include_once ‘./1.txt’,首先会先去判断是否已经包含过了,如果包含过就不包含了

你可能感兴趣的:(PHP)