PHP
视频链接:https://www.bilibili.com/video/BV1ys411P7HX?p=6
认识互联网
互联网实际访问
互联网访问定义:互联网中的网站访问,本质是一个互联网上有一台已知的服务器,然后用户知道服务器对应的名字(UPL),然后通过URL,再经过互联网协议(HTTP协议)去自动寻找,并且服务器提供数据,浏览器解析数据的过程。
互联网基本知识
-
所有计算机在互联网上访问到的内容都是由相应服务器提供资源
-
服务器的本质不是硬件,二十装有服务器软件的计算机
装有服务器软件就可以对外提供对应服务
一台计算机可以安装多种服务软件
-
所有计算机在互联网上都有一个唯一的标识代表自己:IP
IPV4是由32个比特位组成,转换成10进制分成四段,如112.90.32.8
IPV6是由128个比特位组成,转换成16进制分成8段,如31da:1d3:0:2f3b:2aa:ff:fe28:9c5a
特殊IP:127.0.0.1代表本机电脑
-
任何软件都有属于自己的对外交流的入口:端口(port),而任何客户机尝试访问服务器都需要指定访问的端口(常用的有默认)
web服务器常用端口:80
telnet远程登陆端口:23
FTP服务器常用端口:21
mysql数据库服务器常用端口:3306
-
IP能够找到电脑,但是用户记不住,所以需要给IP设定一个别名方便用户记住,这种别名叫做域名(domain name)
域名存在纯粹是为了方便用户记住:www.baidu.com
域名可以分为顶级、一级域名(.com/.cn/.org/edu),二级域名(baidu.comA),三级域名(www.baidu.com)以此类推 -
域名是人为的不具有唯一性,要找到服务器只能通过ip,所以计算机需要将用户输入的域名转换成对应的ip地址才能找到服务器,这个过程叫做域名解析,提供该服务的系统叫域名系统DNS(Domain Name System)
提供服务的产品公司将域名和服务器IP维护到DNS上(收费)
本地域名解析,可以使用计算机自带的本地域名系统hosts文件(c:\windows\System32\drivers\etc\hosts)
互联网真实访问流程
互联网的访问站在用户的角度操作简便,但是站在一个网站的角度,需要提供硬件、软件和协议的各种支持,最终才能实现数据库的用户共享
服务器区分
域控服务器:用于内网,主要用于类似一个公司内部资源的管理的服务器
文件服务器:主要进行文件管理
web服务器:提供web服务,人们可以通过浏览器访问提供的资源。一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个web服务器是apache、nginx、iis。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因
FTP服务器:用于文件上传,对硬盘资源要求高
邮件服务器:与FTP类似
数据库服务器:性能要求相对较高,数据库要提供大量数据的分析、管理等等
VoD服务器:类似优酷一类的,使用的就是VoD服务器,对于流量、内存、网络要求较高
web发展历史
经历了两个阶段,俗称web1.0和web2.0,站在开发者的角度来说就是静态网站和动态网站
web1.0(信息共享):web技术发展的第一个解读眼就是静态技术阶段,HTML语言就是web向用户展示信息的最有效载体。在这个阶段,是以编辑为特征,网站提供给用户的内容是网站编辑处理后的,用户阅读网站提供的内容,这个过程是网站向用户的意向行为。
web2.0(信息共建):web技术发展的第二个解读眼就是动态技术阶段,在web1.0时代,web服务器会返回整个页面或者文档,但随着动态脚本语言的出现(ASP、JSP、PHP),使得用户可以在获取信息的同时还能提供信息,并且可以将提供的信息分享给其他用户。在这个阶段加强了网站与用户之间的互动,网站内容基于用户提供,网站的诸多功能也由用户参与建设,实现了网站与用户的双向互动交流,web2.0不同于web1.0的最大之处在于它的互动性,用户拥有自己的数据,并完全基于WEB,所有功能都能通过浏览器完成。
认识PHP
PHP是一种编程语言,是一种建立了动态网站的脚本语言。
是一种运行在服务器端,可以嵌入到HTML的脚本/编程语言。
PHP的历史
安装部分基本参考(https://blog.csdn.net/weixin_36466834/article/details/105483903)
安装Apache
官网下载地址:http://httpd.apache.org/download.cgi
点击Files for Microsoft Windows
点击ApacheHaus
下个x64的版本就行
解压后找到conf目录,打开里面的httpd.conf文件
将里面的DocumentRoot改成存放网页的文件夹,Define SRVROOT 后面的修改为自己的安装目录后,保存。
担心会提示端口占用所以顺便把端口改为8081
以管理员身份运行命令行界面,进入安装目录下的bin目录,输入:httpd.exe -k install -n “Apache24”
双击 Apache24\bin目录下的ApacheMonitor.exe,来管理apache运行状态。运行后,任务栏会出现ApacheMonitor.exe的小图标,左键点击该图标,选择Apache24->Start/Stop/Restart。通过ApacheMonitor.exe来管理Apache的状态。
安装PHP
1、PHP官网链接:https://www.php.net/
或者直接点击官网下载链接:https://www.php.net/downloads
点击downloads
(8.0现在是测试版所以下载7版本)点击windows downloads
下载x64 thread safe版本
解压后将目录下的php.ini-development重命名为php.ini
把php.ini复制一份到C:\Windows目录下
不然下一步测试的时候就会报错
不需要做额外配置了直接测试php.exe即可
在存放网页的文件夹下新建一个index.php,这里为D:\app\Apache\www 文件夹
<?php
echo'hello word!';
?>
php.exe -f D:\app\Apache\www\index.php
//-f代表文件命令,后面是index.php的文件路径
剩下就照搬照抄吧。做这篇文章的时候我已经全部安装完毕了
配置Apache支持PHP
在Apache安装目录下的httpd.conf里新增如下内容:
【注意:dll的路径因为存在空格,需要在dll的路径加上双引号,否则会出现报错】
#让Apache服务器引入php7模块,从而可以支持php应用的web访问
LoadModule php7_module "D:\\Program Files (x86)\\WAMP\\php-7.2.29-Win32-VC15-x64\\php7apache2_4.dll"
#告诉Apache识别php文件的后缀,从而对这些后缀的应用进行解析
AddType application/x-httpd-php .php .html .htm
#告诉Apache服务器php.ini的目录,从而使服务器读取php的配置
PHPIniDir "D:\\Program Files (x86)\\WAMP\\php-7.2.29-Win32-VC15-x64"
Apache的根目录修改:默认为安装目录下的htdocs目录。打开httpd.conf,将
DocumentRoot " "
<Directory " ">
12
这两行前的#去掉,并修改为自己想设置的目录即可。
DirectoryIndex里面新增加一个index.php
保存文件,重启Apache。
测试
在Apache根目录下新建index.php
<?php
phpinfo();
?>
在浏览器中访问 127.0.0.1 或者 localhost 或者 127.0.0.1/index.php 或者 localhost/index.php(注意,如果修改过端口号,需要访问时加上端口号,例:127.0.0.1:8080)。出现下面的页面就是配置成功了。
接下来就是mysql安装了
讲真的我一点都不情愿做这个。。。。
虽然我已经安装好了
这简直就是我挥之不去的噩梦
而且我已经安装好了为什么要在这里浪费时间。
所以我选择照搬照抄。
mysql安装
源:https://www.runoob.com/mysql/mysql-install.html
注意:安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足导致无法安装。
官方安装链接:https://dev.mysql.com/downloads/mysql/
点击 Download 按钮进入下载页面,点击下图中的 No thanks, just start my download. 就可立即下载:
下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\web\mysql-8.0.11 下。
接下来我们需要配置下 MySQL 的配置文件
打开刚刚解压的文件夹 C:\web\mysql-8.0.11 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=C:\Program Files\MySQL\MySQL Server 8.0
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files\MySQL\MySQL Server 8.0\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
接下来我们来启动下 MySQL 数据库:
以管理员身份打开 cmd 命令行工具,切换目录:
cd C:\web\mysql-8.0.11\bin
初始化数据库:
mysqld --initialize --console
执行完成后,会输出 root 用户的初始默认密码,如:
...
2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: APWCY5ws&hjQ
...
APWCY5ws&hjQ 就是初始密码,后续登录需要用到,你也可以在登陆后修改密码。
输入以下安装命令:
mysqld install
启动输入以下命令即可:
net start mysql
注意: 在 5.7 需要初始化 data 目录:
cd C:\web\mysql-8.0.11\bin mysqld --initialize-insecure
初始化后再运行 net start mysql 即可启动 mysql。
登录 MySQL
当 MySQL 服务已经运行时, 我们可以通过 MySQL 自带的客户端工具登录到 MySQL 数据库中, 首先打开命令提示符, 输入以下格式的命名:
mysql -h 主机名 -u 用户名 -p
参数说明:
- -h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
- -u : 登录的用户名;
- -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
如果我们要登录本机的 MySQL 数据库,只需要输入以下命令即可:
mysql -u root -p
按回车确认, 如果安装正确且 MySQL 正在运行, 会得到以下响应:
Enter password:
若密码存在, 输入密码登录, 不存在则直接按回车登录。登录成功后你将会看到 Welcome to the MySQL monitor… 的提示语。
然后命令提示符会一直以 mysq> 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit 退出登录。
安装虚拟主机
定义:Apache为了方便用户开发,也方便服务器对外提供多个网站的访问,提出了虚拟主机的概念。虚拟主机是指在一台计算机上,通过一些配置让一台电脑拥有多个虚拟出来的主机。
虚拟主机分类
基于IP的虚拟主机:一台电脑绑定多个IP(多个网卡,一个网卡一个IP),每个IP 针对一个网站。
基于域名的虚拟主机:一台电脑只有一个IP,但是通过给不同的文件夹命名一个“虚拟”的主机名号,一个文件夹对应一个网站
在网站根目录下添加一个php文件,我这里为D:\app\Apache\www\xuni
内容为:
<?php
phpinfo();
?>
搭建基于域名的虚拟主机
在Apache的主配置文件中httpd.conf下进行配置,但是Apache为了方便配置文件的管理,将虚拟主机单独形成了一个配置文件:httpd-vhosts.conf,在主配置文件同级目录的extra文件夹下。
在httpd.conf中开启虚拟主机配置文件的加载(默认为关闭):http.conf
增加基于域名的主机标签
配置站点、主机名、管理权限以及默认访问页面
权限是针对文件夹的,通常至少设置网站的根目录,实际上目录可以设置N个
配置完成后需要重启apache
Directory:针对指定目录
Require:访问权限
Require local:本地访问
Require all granted:全部访问
Require all Denied:拒绝所有访问
Require ip 127.0.0.1:允许指定IP访问(内部访问)
Require not ip 192.168.98.1:禁止指定IP访问(防止指定攻击)
Require host localhost:允许使用localhost访问(私有主机)
在C:\Windows\System32\drivers\hosts文件中添加
127.0.0.1 www.qiji.com
浏览器中访问www.qiji.com即可,这里我没有使用80端口,所以需要访问www.qiji.com:8088
在虚拟机这里反反复复折腾了好久。
PHP标签
- 标准规则
嵌入到HTML时使用
<?php
#标记起始为PHP
#PHP代码块
#标记结束为:?
?>
- 标记规则:不完整规则
通常是独立的PHP文件(指全部是PHP代码)使用
<?php
#只有起始标记,没有结束标记
- 标记规则:历史规则
总结:PHP因为其语言的特殊性,需要使用标记来人为的区分,因此必须使用PHP所对应的标记。标记的主要方式有两种
- 嵌入到HTML中:必须使用起始喝结束标记
- 独立PHP文件:使用起始标记即可
注释
注释规则:单行注释
使用的注释符号只会让符号后面的内容被PHP解释器忽略,有#和//两种
<?php
#注释,后面的内容会被忽视
//注释,后面的内容会被忽视
这行代码不受影响#后面内容被忽视
?>
注释规则:注释多行(块注释)
从起始符号开始,直到结束符号前都是注释。起始符号为/* ,结束符号为*/
<?php
/*从这里开始注释
这里也是注释部分
到这里结束注释*/
?>
总结:一般短注释使用单行注释,注释内容多且涉及分行的话使用块注释
语句结束符
1、使用规则,单行代码需要在结束处添加分号 ; 告知PHP代码结束了
<?php
echo hello word; //这里的;为语句结束符
//输出hello word
?>
2、PHP语句结束符的特殊性
在PHP有结束标记的情况下,最后一条PHP语句可以没有语句结束符
<?PHP
echo 'hello word'; //此处必须有语句结束符
echo 'bey' //此处为最后一条且有结束标记,可以没有语句结束符
?>
PHP基础语法
PHP运行在计算机的内存中,内存是一种效率很高的存储介质,数据既然要通过PHP来进行处理,那么PHP就需要将数据进行临时保存,这种临时保存的机制就是通过PHP内定的量来控制,分为变量和常量
变量
变量是可以在运行过程中再赋值更改的。
定义
一种在PHP脚本运行周期内(从一个脚本的第一行代码执行到最后一行),系统通过指定的标识符,美元符号$加变量名称,指向保存在内存中的数据,从而在代码运行的过程中,可以通过标识符来获得对数据的使用的一种代码形态。
命名规则
- 变量前一定要使用”$”, 声明和使用都要有这个符号。
- 可以是任意长度,由字母、数字、下划线组成;但是不能以数字开头
- 不能使用PHP的运算符号+ - * / % & .
- PHP可以使用系统关键字作为变量名
- 变量区分大小写
- 变量名称一定要有意义,可以使用英文单词,也可以使用汉语拼音
- 比较复杂的复合命名变量可以使用下划线法: f a m i l y n a m e ( 推 荐 用 下 划 线 连 接 单 词 ) , 或 者 驼 峰 法 : family_name(推荐用下划线连接单词),或者驼峰法: familyname(推荐用下划线连接单词),或者驼峰法:familyName(单词首字母大写)
<?php
$abc=1; #有效变量名
$a_3=1; #无效变量名
$3_a=1; #有效变量名
?>
使用
PHP是一种弱类型语言,即变量的定义可以直接使用,且不用管实际赋值给变量的数据是什么样子
<?php
#定义变量
$abc=1; //定义且赋值,表示$abc以后就代表1这个数值
$abc='abc'; //PHP重新定义,表示$abc以后代表'abc'不再代表'1'
#访问
echo $abc; //访问PHP变量,表示输出$abc代表的数据'abc'
#查看变量详情
var_dump($abc); //包括变量名字长度,所保存的数据类型等
#删除
unset($abc); //删除$abc变量,表示将$abc这个符号清理掉,后续就不再刻意访问该变量
echo $abc; //错误:系统提示没有一个叫做$abc的变量
?>
变量的生命周期
变量的存在是为了在运行过程中能够有效的访问数据,所以PHP变量的生命周期是两种:
1、人为的删除变量
2、脚本执行的结果
预定义变量
系统中为了方便程序员开发,将很多需要用户操作的变量制作成系统变量,用户可以直接调用就能获取相应的数据结果
预定义变量通常都是数组数据
- $_GET:用户通过get方式提交的数据
- $_POST:用户通过post方式提交的数据
- $_REQUEST:用户通过get和post提交的数据
- $_SERVER:用户和服务器的基本信息数据
- $_FILES:用户提交的文件数据
- $_SESSION:session数据
- $_COOKIE:cookie数据
- $GLOBALS:所有全部变量,也是唯一一个不是以下划线开始的预定义变量
- $_ENV:环境数据
常量
命名规则
- 常量名通常使用大写字母
- 不需要以$开头
- 由字母、数字、下划线组成,不能以数字开头
- 复杂的常量名通常使用下划线法表示:FAMILY_NAME
- 常量的命名比变量更要宽松(不建议)
定义
赋值后在整个脚本执行周期中不允许改变的量
常量的定义通常使用define函数或者const关键字,而且必须定义的时候就对其赋值
<?php
//有效常量名
define('PI',3.15482); //3.15482是赋予PI的值
define('SELE_PI',34);
const FAMILY_NAME = 'Green';
define('-_-','Smile'); //宽松方式
//错误常量名
define('3PI',1865);
const 3_PI = 3;
?>
使用
一旦定义不能改变,只能在后面使用其他初始化时给的数据,常量直接通过常量名访问
<?php
//访问常量
echo PI; //访问前面定义的常量
//特殊符号代表的常量里不能用普通方式
echo -_-; //错误,系统不能识别
//所有常量都可以使用constant函数
echo constant('-_-'); //所有常量都就可以采用这周方式询问
?>
系统常量
- PHP_VERSION:PHP版本号
- PHP_INT_SIZE:PHP中int数据占用的内存字节数
- PHP_INT_MAX:PHP中int数据所能表示的最大值
魔术常量
系统中有一些东西是在变化的,但是不允许随意变化,魔术常量就是其值会随着实际环境变化而变化。这种变化是程序员不能控制的
魔术常量使用双下划线开始,也是用双下划线结束
__DIR__ //当前文件所在路径
__FILE__ //当前文件所在路径(绝对路径)
__FUNCTION__ //函数内部使用,表示函数的名字
__CLASS__ //类内部使用,表示类名
__NAMESPACE__ //命名空间内部使用,表示当前所属命名空间
__METHOD__ //类内部方法里使用,表示当前方法名字(所属类)
__LINE__ //当前所在行数
<?php
echo __DIR__; //获取当前PHP脚本所在路径
echo __FILE__; //获取当前PHP脚本所在路径(包含文件名)
echo __LINE__; //获取当前行号
echo __LINE__; //获取当前行号,比上一行大1
?>
PHP数据类型
分类
基本数据类型
整型(int/integer):存储整数数据
浮点型(float):存储小数数据和超过整形范围的整数数据
布尔型(bool/boolean):存储布尔类型数据,只有true和false两个值
字符串型(string):存储字符串数据(最常见)
复合数据类型
数组型(array):存储数组数据(即多个数据存放到一个变量中)
对象型(object):存放对象数据,由类实例化得到(面向对象)
特殊数字类型
资源型(resource):存储外部资源数据
空型(null):变量没有存储任何数据
数值型(整型+浮点型)
整型
采用八个字节存储数据,根据数据要求,PHP提供了多种进制的整数存储方式
存储的数据精确
<?php
//常见整型
$num1 = 123;
$mun2 = -50;
//八进制存储:逢8进1,使用0前缀,最大数值不超过7
$num3 = 0123; //int(83):系统回自动按照十进制输出(用户一般不使用8进制)
var_dump($num3);
//十六进制存储:逢16进1,使用0x前缀,从10开始使用a代替,依此到15使用f
$num4 = 0x123;
var_dump($num4); //int(291):系统转换成10进制输出
//二进制存储:逢2进1,使用0b前缀(binary)
$num5 = 0b1101;
var_dump($num5); //int(13)
?>
进制转换
实际开发需要用到进制转换的时候,可以使用PHP提供的系统函数:二进制bin,八进制oct,十进制dec,十六进制hex。彼此转换分先后组合即可(如二进制转十进制=bindec)另外二进制转十六进制比较特殊:bin2hex
浮点型
在PHP中采用8个字节存储数据,浮点数也提供了多种小数存储方式
<?php
$f1 = 1.23;
$f2 = 1.23e3; //1.23 * 10 ^ 3
var_dump($f1,$f2); //float(1.23),float(1230)
?>
精度问题
浮点数与整型一样使用8个字节存储数据,但是能够表示的数值却比整型大很多,因为浮点数64个字节并非全部用于存储数值,而是有一部分存储指数(10的N次方中的N),一部分存储实际数值。造成的结果是:存储的数值比整型大但是精度只能保证在13-14位之间,超过的部分就会被四舍五入
<?php
$num = PHP_INT_MAX; //整型最大值
$fi = $num + 1; //超出整型范围
var_dump($f1); //float(9.2233720368548E+18)
?>
总结
整型精度较高,但存储的数值相对较小,浮点型精度较低,但存储的数值相对较高
布尔型
布尔型是一种简单的数据类型,用于对某些注重结果的数据存储,结果只会有true和false两个值
<?php
$b1 = true;
$b2 = false; //在PHP中不区分大小写
var_dump($b1,$b2); //bool(ture) bool(flase)
?>
实际开发中运用范围较广
字符串型
几乎所有用户提供的数据都是字符串类型
定义
程序员使用了引号定义的数据都成为字符串
单引号、双引号
都可以定义字符串,但彼此有区别。单引号中只能解析少量的转义符号:
/*
单引号中只能解析少量的转义符号:\',\
双引号中能够解析较多的转义符号:\$,\",\,\n,\t
双引号中能够解析嵌套在字符串中的PHP变量(注意变量要于其他字符串分离,人工使用{})
*/
<?php
$s1 = 'abcdefg\'\n\t\"\$' ;
$s2 = "abcdefg\'\n\t\"\$";
var_dump($s1); //string(16) "abcdefg'\n\t\"\$",不见的斜杠代表被转义了
var_dump($s2); //string(13) "abcdefg\' "\$",不见的斜杠代表被转义了
$a = '你好';
$b = '世界 $a !';
$c = "世界 $a !";
echo $b; //世界 $a !,系统不能解析$a,当作普通字符串解析
echo $c; //世界 你好 !,系统解析了$c中的$a变量
$d ="$abc"; //错误:系统提示没有定义变量$abc,系统区分不出来
$e = "{$a}bc"; //正确,系统理解$a是一个独立的变量
?>
定界符
- nowdoc是类似单引号功能
- heredoc是类似双引号功能
- nowdoc和heredoc在内部的所有内容都属于字符串本身(不能写注释)
- nowdoc和heredoc开始符号后不能有任何内容
- nowdoc和heredoc结束符号必须顶格,且后面除了语句结束符不能有任何内容
<?php
$str = 'hey';
//nowdoc
$str1 =<<<'END'
$str , word
I LOVE YOU
END;
//heredoc
$str2 =<<<END
$str , word
I LOVE YOU
<script>
alert('$str');
</script>
END;
echo $str1;
echo $str2;
字符串的查看
<?php
$str = 'hello word';
echo $str[0]; //h:第一个字母
echo $str[1]; //e:第二个字母
echo $str[-1]; //d:倒数第一个字母
?>
PHP数组
定义
数据的组合,将一系列相关或者相似的数据组合到一起,使用一个变量代表。在数组中可以有多个数据,每个数据称之为一个元素,元素和元素直接使用英文逗号分隔。元素的组成有两部分:下标,有时不可见(key)值(value)。
- 使用arryay关键字来初始化数组
- 使用数组括号[]来初始化数组
- 使用变量跟[]来初始化数组,但是这个时候需要给定一个值,而且一次只能增加一个元素
<?php
//使用arry关键字定义数组
$arr1 = array(); //可以不指定元素
$arr2 = array('name','age'); //也可以在括号中添加元素
//使用[]定义数组
$aar3 = [];
$arr4 = ['name','age'];
//针对变量增加元素方式定义数组
$arr4[] = 'name';
?>
PHP中数组的使用
数组的访问就是访问数组中的某个元素,访问方式必须通过数组下标进行访问。默认的数组元素的下标是不可见的,根据元素的顺序从0开始。
<?php
$arr = ['name','age']; //实际上[0 => 'name',1 => 'age']
//访问name值
echo $arr[0];
?>
PHP中数组的特点
- PHP数组不限长度
- PHP中数组可以动态增加元素
- PHP中数组元素的值可以是任意数据类型
- PHP中数组下标可以是纯数字(索引数组)、纯字符串(关联数组)、混合数字和字符串(混合数组)
<?php
//索引数组
$arr1 = array(1,2,3,4,5);
//关联数组
$arr2 = array('name' => '张三','age' => '30');
//混合数组
$arr3 = array(1,2,'name' => '张三','age' => '30');
//访问:同样使用下标访问
echo $arr1[1]; //2
echo $arr2['name']; //张三
?>
<?php
//定义数组
$arr = array(1 =>10,10 => 100,100 => 1000);
//默认增加元素:系统自动从最大下标开始+1
$arr[] = 10000;
//增加一个小于已有索引值(下标)元素
$arr[2] = 20;
var_dump($arr);
二维数组
普通的一维数组里面的数组又有一维数组,称为二维数组,数组建议不超过三维
类型判断
通过系统函数判定,以is_开头,后面根据数据类型可以通过操作手册is_进行搜索(PHP操作手册.chm->索引->输入is_)
<?php
$num = 100;
$str = '100';
//数值
$res = is_numeric($str);
var_dump($res); //bool(true),is_numeric是用来判断数据是否是数值或者纯数值的字符串
var_dump(is_scalar($rnum)); //bool(true),is_scalar是用来判断数据是否标量(基本数据类型)
var_dump(is_null($rnum)); //bool(false),is_null是用来判断数据是否为NULL
?>
类型转换
定义
PHP中需要将不同类型的数值转换为某个指定数据类型才能进行相关运算。
PHP是一种弱类型语言,所以在PHP中有两种类型转换方式:自动转换和强制转换
自动转换
<?php
$num = 5;
$str = '1.2a35';
echo $num + $str; //6.2 自动转换成数值参与运算
/*
字符串转换成数值规则
1、第一个字符是字母或者其他特殊符号,结果为0
2、第一个字符是数字,可以依次往后保留,直到不是数字为止
3、如果在数字往后推的情况下,碰到第二个小数点结束(保留一个小数点)
*/
?>
强制转换
<?php
$str - '1.2.3.4.3abc';
//强制转换成数值
echo(float)$str; //1.2
?>
PHP运算符
定义
运算符是系统定义的特殊符号,PHP解释器在碰到各种符号时,就会按照预定的方式来实现某些运算。
赋值运算符
-
给变量或者常量进行赋值运算:把右边的结果保存到左边
-
=:最常见的赋值运算
-
+=:左边与右边的运算结果(整体)相加,然后再把整个运算结果赋值给左边
-
-= *= /=:与+=一致
-
.=:“.”为字符串连接操作符,表示左边的字符串与右边字符串连起来后赋值给左边变量
-
注意:在使用“/=”进行运算的时候,右侧的结果不能为0,否则报错
<?php
//简单赋值
$num1 = 10;
//复合操作
$num +=10;
//等价于以下操作
$num2 = $num1 + 10;
//优先级操作
$num2 = 10;
$num2 *= 1 + 1;
//等价操作
$num2 = $num2 * (1 + 1);
//注意事项
$num2 /= 0; //报错
//等价于
$num2 = num2 / 0; //除数不能为0
?>
算术运算符
- 普通算术运算,需要符号左右两边都是数值
- +:加法运算,左右两边相加
- -:减法运算,左边减去右边
- *:乘法运算,左边乘以右边
- /:除法运算,左边乘以右边(右边不能为0)
- %:取余运算(模运算)
<?php
//基础运算
$a = 10
$b = 8
//加减乘除取余基本运算
$c = $a + $b //$c = 10 + 8 = 18
$d = $a / $b //$d = 10 / 8 = 1.25
$e = $a % $b //$e = 10 % 8 = 2(剩余2不能整除)
//注意事项
$f = $a / 0 //错误:除数不能为0
$g = $a % 0 //错误:除数不能为0
?>
错误抑制符
- 单目运算,将可能出现的比较低级的错误给抑制,不报错
- @:在可能出现错误的表达式之前使用
<?php
//错误抑制符是一种代码的保护机制,功能是不让用户看到错误,因为用户不明白错误是什么原因
$a = 10 / 0 //程序直接报错,非常专业错误
@$a = 10 / 0 //系统依然错误,但是不会报错给用户
?>
比较运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B04WxeTC-1610327584178)(F:\baishiqi\php\PHP1\image-20210105094901616.png)]
<?php
$a = 10;
$b = 5;
$c = '10';
//基本比较运算
$res= $a > $b;
var_dump($res); //布尔true:10 > 5,成立
//全等运算
$res = ($a == $c);
var_dump($res); //布尔true:10与 ‘10’系统会自动转换成相同的格式比较,都是10,所以相等
$res = ($a === $c);
var_dump($res); //布尔false:10与10值相同,但是10是数字,‘10’是字符串,类型不同
?>
php中比较特殊,通常系统会自动将类型转换成相同的然后做比较。
可以参照PHP操作手册种的类型比较表:PHP操作手册->附录->PHP类型比较表
飞船运算
飞船运算,类似组合比较运算中的大于、等于和小于三种运算符于一身
<=>:飞船运算,左边大于右边返回1,等于右边返回0,小于右边返回-1
<?php
$a = 5;
$b = 3;
$c = '5';
var_dump($a <=> $b); //1:因为5>3
var_dump($a <=> $c); //0:因为5 == '5'
?>
合并运算符
2021.1.11未完待续…