PHP基本功(一)

开头

学校选修课,为了学分又得把这门语言捡起来了(卑微)

课件基础上进行的修改,具体来自哪我也不知道(真的)

反正是在B站大学看到的

一 、PHP简介

概述

PHP是Hypertext Preprocessor的缩写,(超文本预处理器)是一种在服务器端运行的开源的脚本语言。

LAMP组合(Linux,Apache,MySQL,PHP),这四个产品都是公开源代码的产品

PHP基本功(一)_第1张图片

php是一门语言,用来做业务逻辑
apache为PHP提供了运行环境
linux为Apache的运行提供了平台
mysql数据库用来存储数据

五个基本概念

1、静态页面和动态页面

静态页面:服务器不执行的页面
动态页面:服务器执行的页面

问题:动态网站中是否可以存放静态页面

答:可以

2、客户端和服务器端

浏览者这段是客户端
服务器端:给浏览者提供服务

在这里插入图片描述

3、端口和端口号 端口号的范围: 0-65535

PHP基本功(一)_第2张图片

4、BS架构和CS架构

BS:通过浏览器去访问服务器

b:browser(浏览器)
s:sever(服务器)
优点:
1、只要有浏览器就可以访问
2、开发低
缺点:
2、开发的代码都放在服务器上    胖服务器-瘦客户端

所有的web都是BS架构的

CS:通过客户端软件去访问服务器

c:client(客户端)
s:server(服务器)
优点:
1、可以开发客户端和服务器端,这时候就可以实现负载的均衡
缺点:
1、必须要安装一个软件才能去访问
2、开发成本高

例如:QQ、炒股软件

5、前台和后台

前台:浏览器看到的界面
后台:管理员看到的界面

PHP的优点

  1. 跨平台,既能在windows上运行,也能在linux上运行
  2. 源码开放:不会涉及到版权问题
  3. 语法简单:PHP入门简单
  4. 运行在服务器端,只要在服务器部署环境就可以了。

二、 Web介绍

web时代的变迁

从互联网开始崛起到现在,经历了从web1.0、2.0到web3.0的过程

Web1.0(信息共享)的主要特点在于用户单纯的获取信息
Web2.0(信息共建)更注重用户的交互作用,用户既是网站内容的浏览者,也是网站内容的制造者。
Web3.0(信息传承)通过第三方信息平台对多家网站的信息进行整合,用户在互联网上拥有自己的数据,并能在不同网站上使用

举例:

Web1.0:来到一个餐馆,老板给你上了一盘番茄炒蛋;
Web2.0:来到一个餐馆,你跟老板主动点了一份番茄炒蛋;
Web3.0:来到一个餐馆,老板见到你就问,老规矩,还要番茄炒蛋?

Web服务原理

静态网站原理(浏览器-服务器)

动态网站原理(浏览器-服务器-数据库)

智能网站原理(浏览器-服务器【分析推荐】-数据库)

三、 搭建Web服务器

安装phpstudy

直接解压即可

目录结构

PHP基本功(一)_第3张图片

启动服务

PHP基本功(一)_第4张图片

访问服务器

在www目录下创建demo.php页面


   phpinfo();

访问服务器

访问规则:http://服务器ip地址/php页面
比如:
http://localhost/demo.php
http://127.0.0.1/demo.php

PHP基本功(一)_第5张图片

常用的命令

补充DOS命令

切换盘符	盘符+冒号
进入目录	cd 目录地址

Apache的命令

httpd -v   查看apache版本号   version
httpd -t   检测运行环境  test

PHP基本功(一)_第6张图片

PHP的命令

php -v  PHP版本号

PHP基本功(一)_第7张图片

互联网通讯原理

本质一台电脑访问另外一台电脑资源、寻址过程(IP地址、端口、域名、DNS)

在互联网上,IP地址是用来区分每台计算机的标识,但是IP记忆不友好,我们将IP地址取一个名字,一个IP对应一个名字,这个名字就称为域名。

访问过程:

PHP基本功(一)_第8张图片

步骤:

1、客户端输入域名(网址),在最近的机房做DNS解析(Domain Name Server),DNS解析就是将域名转化成IP地址

2、通过IP地址访问服务器

DNS解析

目标:ip地址访问服务器不方便,通过域名来访问。

PHP基本功(一)_第9张图片

hosts(用来做DNS解析)

PHP基本功(一)_第10张图片

测试

PHP基本功(一)_第11张图片

服务器配置

虚拟目录配置

1、更改虚拟目录

要更改虚拟目录的位置,需要到apache的配置文件中更改(conf/httpd.conf)

在phpstudy中,httpd.conf和vhost.conf都有配置虚拟目录的指令,并且两个配置文件中都有配置虚拟目录的指令,为了测试,我们注释掉vhost.conf的引入

在这里插入图片描述

更改虚拟目录

PHP基本功(一)_第12张图片

提醒:项目上线以后,不可以显示目录结构

权限的练习

例题一:

Order allow,deny
Allow from all
# 允许所有请求访问

例题二:

Order allow,deny
Allow from all
Deny from all
# 拒绝所有请求访问

练习三:

Order allow,deny
Deny from all
Allow from all
#  拒绝所有请求访问

练习四:


   Order deny, allow
   Allow from 192.168.101.50
   Deny from 192.168

# 拒绝192.168开头,但除去(192.168.101.50)的IP的访问

练习五:


    Order deny, allow
    Allow from 192.168.101.50
   Deny from all

# 只允许192.168.101.50访问

练习六:


   Order allow,deny
   Allow from 192.168
   Deny from 192.168.101.50

# 只允许192.168开头的,但要去除192.168.101.50 的IP访问

2、更改默认首页

在httpd.conf配置文件中
在这里插入图片描述

默认首页的查找顺序,从前往后。

3、更改监听端口

在httpd.conf配置文件中设置

通过Listen指令设置监听的端口

可以设置多个监听端口

在这里插入图片描述

访问:

http://域名:端口号/demo.php

PHP基本功(一)_第13张图片

补充:查看端口的占用情况

在命令行下使用 netstat -ano查看

PHP基本功(一)_第14张图片

在结果中查找字符串

在这里插入图片描述

虚拟主机配置

需求:

输入www.baidu.com	打开web1的网站
输入www.sina.com打开web2的网站

配置过程:

要配置虚拟主机,需要在httpd.conf中引入虚拟主机的培训文件(vhosts.conf)

在这里插入图片描述

vhosts.conf配置如下


  DocumentRoot "C:\web1"       #指定虚拟目录路径
  ServerName www.baidu.com     # 虚拟目录绑定的域名
  DirectoryIndex aa.php        # 默认首页
  
    Options -Indexes -FollowSymLinks +ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  




DocumentRoot "C:\web2"
 ServerName www.sina.com
 DirectoryIndex bb.php
  
    Options -Indexes -FollowSymLinks +ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  

在host文件中做dns解析

在这里插入图片描述

访问结果

PHP基本功(一)_第15张图片
在这里插入图片描述

补充:站点、虚拟目录、虚拟主机的区别

站点:站点就是一个文件夹,用来保存与网站有关的所有素材

虚拟目录:站点+权限

虚拟主机:虚拟目录+域名

四、PHP语法入门

PHP是编译型语言

编译语言和解释语言的区别在于是否保存最终的可执行程序。

PHP基本功(一)_第16张图片在这里插入图片描述

PHP定界符

因为PHP是脚本语言,所以需要定界符

1、标准风格(推荐使用)


例题


	echo 'i am a boy!';
?>

提醒,如果整个页面都是PHP代码,PHP结束符是可以省略的(推荐)


	echo 'i am a boy!';

2、短标记风格(默认情况下不支持,需要在php配置文件中开启支持段标记)

在这里插入图片描述


例题:


	echo '床前明月光';
?>

小结:

httpd.conf是apache的配置文件

php.ini是php的配置文件

注释

单行注释: //和#

多行注释: /* */

PHP基本功(一)_第17张图片

PHP输出语句

echo:输出
print:输出,输出成功返回1
print_r():输出数组
var_dump():输出数据的详细信息,带有数据类型和数据长度


五、 变量

变量的本质就是内存中的一段空间

变量的命名规则

  1. 变量必须以 $ 开头,$符不是变量的一部分,仅表示后面的标识符是变量名。
  2. 除了$以外,以字母、下划线开头,后面跟着数字、字母、下划线
  3. 变量名区分大小写,$ aa和$ Aa是两个空间

下列变量是否合法

$a		合法
$a1		合法
$1a		不合法
$_1a	合法

注意:PHP语句必须以分号结尾


	$a=10;
	$name='Tom';
?>

可变变量

变量名可以变,将变量名存储在另外一个变量中

例题


$a=10;
$b='a';
echo $$b;	//10

例题


	$name1='tom';
	$name2='berry';
	if(rand(1,10)%2){
      
		$name='name1';	//将变量名存储在$name中
	}else{
     
		$name='name2';
	}
	echo $$name;   

小结:

1、rand(1,10):获取1-10的随机整数

变量传递

变量的传递有值传递和地址传递(引用传递)


//值传递
$num1=10;	//将10付给$num1
$num2=$num1;	//将$num1的值付给$num2
$num2=20;		//更改$num2
echo $num1;		//10

PHP基本功(一)_第18张图片

//地址传递
$num1=10;		//将10付给$num1
$num2=&$num1;	//将$num1的地址付给$num2
$num2=20;		//更改$num2
echo $num1;		//20

PHP基本功(一)_第19张图片

小结:

1、参数的传递有两种,值传递和地址传递

2、&表示获取变量的地址

3、值传递中,一个变量变了,另一个变量没有影响,因为是两个空间

4、地址传递中,一个变量变了,另一个也变了,因为两个变量指向同一个空间

1.7.4 销毁变量

用unset()来销毁变量,销毁的是变量名,变量值由PHP垃圾回收机制销毁(没有变量引用的值是garbage)


$num1=10;
$num2=&$num1;
unset($num1);	//销毁的是变量名
echo $num2;		//10

六、 常量

在整个运行过程中,固定不变的值

定义常量

1、用define()函数定义常量

define(常量名,值,[是否区别大小写])  true表示不区分大小写,默认是false

常量名前没有$符
常量名推荐使用大写

例题:


define('NAME','tom');		//定义常量
define('PI',3.14,true);		//定义常量,不区分大小写
echo NAME,'
'
,Pi; //true表示不区分大小写,默认是区分大小写的。

2、定义常量可以用特殊字符,但是在调用的时候必须用constant关键字调用

define('%-%','tom');
echo constant('%-%');		//通过constant获取特殊字符作为常量名的常量

3、判断常量是否定义,通过defined()判断常量是否已经定义

if(!defined('NAME')){
     	
	define('NAME','berry');
}
echo NAME;	//berry

4、还可以使用const关键字定义常量

const NAME='tom';
echo NAME;		//tom

小结:

1、定义常量有两种方式,define()和const

2、常量在整个运行过程中值保持不变,常量不能重新定义

3、使用constant获取特殊字符做的常量名的值

4、defined()用来判断常量是否被定义

预定义常量

PHP预先定义好的常量

例题

echo PHP_VERSION,'
'
; //PHP版本号 echo PHP_OS,'
'
; //PHP操作系统 echo PHP_INT_MAX,'
'
; //PHP中整型的最大值

魔术常量

魔术常量它们的值随着它们在代码中的位置改变而改变

echo __LINE__,'
'
; //获取当前行号 echo __FILE__,'
'
; //文件的完整路径和文件名 echo __DIR__,'
'
; //文件所在的目录

七、 数据类型

数据类型有两种:强类型和弱类型

PHP是弱类型

基本类型(标量类型)

1、整型

存整数,PHP_INT_MAX获取整形最大值

PHP支持8、10、16机制的整数


$num1=10;		//十进制
$num2=010;		//八进制(数字前面加0)
$num3=0x10;		//十六进制(数字前面加0x)

echo $num1,'
'
; //10 echo $num2,'
'
; //8 echo $num3; //16

进制转换

机制 缩写 单词
十进制 dec decimalist
二进制 bin binary
八进制 oct octonary
十六进制 hex hexdecimalist

例题

PHP提供了进制转换函数

echo decbin(123),'
'
; //十进制转二进制 echo bindec(1111011),'
'
; //二进制转十进制 echo dechex(123),'
'
; //十进制转十六进制 echo hexdec('7b'),'
'
; //十六进制转十进制 echo decoct(123); //十进制转八进制

2、浮点型

浮点数在内存中保存的是近似值

浮点数不能参与比较

var_dump(0.9==(1-0.1));		//bool(true) 
echo '
'
; var_dump(0.1==(1-0.9)); //bool(false)

如果浮点数要比较,必须确定比较的位数

var_dump(0.9==(1-0.1));		//bool(true) 
echo '
'
; var_dump(0.1==(1-0.9)); //bool(false) echo '
'
; var_dump(bccomp(0.1,1-0.9,5)); //比较小数点后面5位 int(0) 0表示相等

提醒:如果一个整数超出了整形的范围,会自动的转成浮点型

3、布尔型

不能使用echo 和print输出布尔型,要使用var_dump()输出

$flag=false;
var_dump($flag);	//bool(false) 

4、字符串型

在PHP中单引号字符串和双引号字符串是有区别的

单引号字符串是真正的字符串

双引号字符串要解析字符串中的变量

例题

$name='tom';
echo '我的名字叫$name','
'
; //我的名字叫$name echo "我的名字叫$name",'
'
; //我的名字叫tom

例题:{ }取变量值

$name='tom';
echo '$name是我的名字','
'
; //$name是我的名字 echo "{ $name}是我的名字",'
'
; //{}表示获取变量的值(tom是我的名字) echo "${name}是我的名字",'
'
; //$和{只要挨着一起就可以(tom是我的名字)

输出特殊字符

echo '老师说:\'上课不要睡觉\'','
'
; //转义字符 echo '文件保存在c:\\'; //文件保存在c:\

字符串定界符

1、有<<<开头,后面跟的是标识符
2、字符串定界符的结束符必须顶格写,前面不能有任何的空白字符
3、字符串定界符分为两种,heredoc(双引号),nowdoc(单引号)

PHP基本功(一)_第20张图片

复合类型

1、数组

在PHP中数组有两种形式,索引数组和关联数组

索引数组:用整数做下标,默认从0开始,后面依次加一

关联数组:用字符串做下标,通过=>符号将下标和值关联起来

例题:数组的声明


//1、索引数组的声明
$stu=array('tom','berry','ketty');   //索引数组
print_r($stu);	//输出数组  Array ( [0] => tom [1] => berry [2] => ketty ) 
echo '
'
; echo $stu[0],'
'
; //tom echo $stu[1],'
'
; //berry echo $stu[2],'
'
; //ketty ------------------------------------------ //2、关联数组 $emp=array('name'=>'李白','sex'=>'男','age'=>22); print_r($emp); //Array ( [name] => 李白 [sex] => 男 [age] => 22 ) echo '
'
; echo $emp['name'],'
'
; //李白 echo $emp['sex'],'
'
; //男 echo $emp['age']; //22

练习:写出数组的下标

$array=array(1=>'a','b','c','d');
print_r($array);   //Array ( [1] => a [2] => b [3] => c [4] => d ) 
echo '
'
; -------------------------- $array=array('a',2=>'b','c',5=>'d'); print_r($array); //Array ( [0] => a [2] => b [3] => c [5] => d ) echo '
'
; ---------------------------- $array=array('a','name'=>'b','c','sex'=>'d'); print_r($array); //Array ( [0] => a [name] => b [1] => c [sex] => d ) echo '
'
; ------------------------------ $array=array(1=>'a',1=>'b',1=>'c','d'); print_r($array); //Array ( [1] => c [2] => d )

数组的下标只能是正整数和字符串

思考如下下标

$stu[true]='tom';		//转成1
$stu[false]='berry';	//转成0
$stu[12.9]='aa';		//转成12(取整数部分)
$stu[-10]='bb';			//负数可以做下标
$stu[-12.3]='cc';		//取负整数
$stu['10']='dd';		//字符串数字转成数字
$stu['']='ee';			//空字符串也可以做下标
$stu[null]='ff';		//转成空字符串做下标
print_r($stu);

短数组语法,可以直接通过中括号声明数组

$stu=['tom','berry','ketty'];
print_r($stu);  //Array ( [0] => tom [1] => berry [2] => ketty ) 

多学一招:在PHP7.1中可以支持数组的赋值

//例题,两个数交换
$num1=10;
$num2=20;
[$num1,$num2]=[$num2,$num1];
echo $num1,'
'
,$num2;

二维数组的声明

$stu=[
	['name'=>'tom','sex'=>'男','age'=>22],
	['name'=>'berry','sex'=>'女','age'=>23]
];
echo '
';
print_r($stu);
//运行结果
Array
(
    [0] => Array
        (
            [name] => tom
            [sex] =>[age] => 22
        )

    [1] => Array
        (
            [name] => berry
            [sex] =>[age] => 23
        )

)

多学一招:字符串可以通过数组的方式去调用

echo 'abc'[0],'
'
; //a echo 'abc'[-1],'
'
; //c,从右边开始取第一个 7.1开始支持

小结:

1、数组在内存中一段连续的空间

2、如果要保存同一类型的多个数据就使用数组

2、对象

对象在后面专门讲解(面向对象编程)

特殊类型

1、资源

2、null

在这里插入图片描述

提醒:在PHP中 null和NULL是一样的,不区分大小写

类型转换

1、自动类型转换:当提供的类型和需要的类型不一致的时候会自动进行类型转换

$num=10;
if($num){
        //自动将数字转成布尔型
	echo 'aa';
}else{
     
	echo 'bb';
}
---------------------------------
echo '20'-10;	//自动的将字符串转成数字

2、强制类型转换

语法:(数据类型)数据


$num1='12';
var_dump($num1,(int)$num1,(float)$num1);   //string(2) "12" int(12) float(12) 

其他类型和布尔之间的转换

规则:0、空为假,非0非空为真


var_dump((bool)'abc');	echo '
'
; //bool(true) var_dump((bool)''); echo '
'
; //bool(false) var_dump((bool)'0'); echo '
'
; //bool(false) var_dump((bool)'0.0'); echo '
'
; //bool(true) var_dump((bool)'00'); echo '
'
; //bool(true) var_dump((bool)'false'); echo '
'
; //bool(true) var_dump((bool)'null'); echo '
'
; //bool(true) var_dump((bool)1); echo '
'
; //bool(true) var_dump((bool)0); echo '
'
; //bool(false) var_dump((bool)-10); echo '
'
; //bool(true) var_dump((bool)0.0); echo '
'
; //bool(false) var_dump((bool)array()); echo '
'
; //bool(false) var_dump((bool)array(1)); echo '
'
; //bool(true) var_dump((bool)array(false)); echo '
'
;//bool(true) var_dump((bool)null); echo '
'
; //bool(false)

八、 运算符

算术运算符

一元运算符 二元运算符
++ +
-
*
/
% (取模)

注意:在PHP中,算术运算符只能做数学运算。


echo '10'+'20','
'
; //30 echo '10ab'+'20cd','
'
; //30 echo 'ab10'+'cd20','
'
; //0

++前置:先自增再运算

++后置:先运算再自增

练习

$num=10;
$num++;
echo $num;	//11
-------------------------
$num=10;
echo $num++;   //10
------------------------
$num=10;
echo ++$num;   //11

练习


$num=5;
echo (++$num)+(++$num)+(++$num);	//21
-------------------------

$num=5;
echo ($num++)+($num++)+($num++);	//18

关系运算符(比较运算符)

>
>=
<
<=
==
!=
===
!==

比较运算符的运算结果是布尔值

逻辑运算符

&	与:运算符两边的表达式都要计算
|	或:运算符两边的表达式都要计算

&&	短路与:如果前面的条件不满足,后面的条件就不用计算了
||	短路或
!	非

例题


$a=5;
$b=10;
if($a>10 && ++$a>20)
	echo '你好吗';
echo $a;		//5
//分析:$a>10为false, 与中只要有一个是false,另一个不用计算结果肯定是false,所以短路与++a就不计算了,结果是5
----------------------------

$a=5;
$b=10;
if($a<10 || ++$a>20)
	echo '你好吗';

echo $a;		//5
//分析:短路或只要有一个为true,结果肯定是true,$a<10结果是true,后面++$a就不用计算了。

赋值运算符

=	//赋值
+=			//a+=b   a=a+b
-=
*=
/=
%=

字符串连接符(.)

echo 'aa'.'bb';		//字符串链接	aabb

错误抑制符(@)

错误抑制符只对表达式有效


echo @($aa+$bb);	//错误抑制

三元运算符(?: )

语法:

表达式?值1:值2
//表达式的值为true,返回值1,否则返回值2

练习


$num=11;
echo $num%2?'奇数':'偶数';

null合并运算符(??)

PHP7.0以后才支持

例题


echo $name??'姓名不详';		//姓名不详

多学一招:两个用来判断的函数

isset():判断变量是否被设置,并且设置的不是null
empty():检查一个变量是否为空,能转成false全部是空,['',0,0.0,array(),null]

例题

echo isset($name)?$name:'姓名不详';		//姓名不详
echo '
'
; $stu=array(); echo empty($stu)?'空':'非空'; //空

九、 判断

语法

单分支

if(条件){
     
    
}

双分支

if(条件){
     
    //代码块1
}else{
     
    //代码块2
}

多分支

if(条件){
     
    
}elseif(条件){
         //注意:elseif之间没有空格
    
}else{
     
    
}

多路选择

switch(表达式){
     
        case 常量:
            //代码块
            break;
        case 常量:
            //代码块
            break;
   		default:
        	//代码块
}

例题

例题一、判断闰年(练习双分支)

步骤:

1、创建表单
2、提交数据
3、在服务器获取提交的数据,并判断

代码实现



请输入年份:

运行结果

PHP基本功(一)_第21张图片

小结:

1、$_POST是一个变量,用来保存post提交的数据

2、action=’'表示将数据提到本页面

3、is_numeric()判断变量是否是数字或字符串数字

4、is_int()判断变量是否是整型

5、if、else后面如果只是一句代码,大括号可以省略

例题二:判断成绩(练习多分支)

目标:输入语文和数学,判断等级

代码实现


100){
		echo '语文成绩必须在0-100之间';
	}
	elseif($math=='' || !is_numeric($math) || !($math>=0 && $math<=100)){
		echo '数学成绩必须在0-100之间';
	}else{
		$avg=($ch+$math)/2;		//求平均值
		echo "您的平均分是:{$avg}
"; if($avg>=90) echo 'A'; elseif($avg>=80) echo 'B'; elseif($avg>=70) echo 'C'; elseif($avg>=60) echo 'D'; else echo 'E'; } } ?>
语文:
数学:

运行结果

PHP基本功(一)_第22张图片

例题三:更改颜色(switch-case)

目标:将文字的颜色改成选择的颜色



	window.οnlοad=function(){
		document.getElementById('shi').style.color='$color';
	}
	
str;
}
?>

锄禾日当午,
汗滴禾下土。
谁知盘中餐,
粒粒皆辛苦。

运行结果

PHP基本功(一)_第23张图片

你可能感兴趣的:(PHP,php,编程语言,后端,apache,mysql)