目录
PHP简介
什么是PHP
PHP定义:一种服务器端的 HTML 脚本/编程语言,是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。是一种广泛用于 Open Source(开放源代码)的尤其适合 Web 开发并可以嵌入 HTML 的多用途脚本语言。它的语法接近 C,Java 和 Perl,而且容易学习。该语言让 Web 开发人员快速的书写动态生成的网页。
PHP前身:Personal HomePage,个人主页,使用Perl语言开发的一种写个人主页的语言
PHP:PHP Hypertext Preprosessor,php超文本预处理器,底层使用C语言
PHP发展史
Rasmus Lerdorf :创建者
1994:1.0,个人perl,非常简单(简陋)
1996:2.0,C底层,变的相对比较强大
1998:3.0,zendEngine,联合zend公司共同管理和维护PHP,zendEngine(zend引擎)用户高效的解析php代码
2000:4.0,session+输出缓冲等,session技术(会话技术),
2004:5.0,zend引擎2代,增加新技术(面向对象更新,命名空间,异常)
2015:7.0,新版的ZendEngine引擎,性能提升,新特性(异常)
平台支持(window,Linux,UNIX)
数据库支持(Sqlserver,mysql,Oracle,Access)
静态网站与动态网站的区别
静态网站:web1.0时代
动态网站:web2.0时代
网站
Website的中文名称是网站,是指在互联网上,根据一定的规则,使用HTML、PHP等代码语言制作的用于展示特定内容的相关网页的集合,有可供管理人员操作的后台及用户使用的前台。简单地说,Website是一种通讯工具,就像布告栏一样,人们可以通过Website来发布自己想要公开的资讯,或者利用Website来提供相关的网络服务。人们可以通过网页浏览器来访问Website,获取自己需要的资讯或者享受网络服务。
静态网站特点
1.网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;
2.静态网页的内容相对稳定,因此容易被搜索引擎检索;
3.静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;
4.静态网页的交互性较差,在功能方面有较大的限制。
动态网站特点
1.交互性:网页会根据用户的要求和选择而动态地改变和响应,浏览器作为客户端,成为一个动态交流的桥梁,动态网页的交互性也是今后Web发展的潮流。
2.自动更新:即无须手动更新HTML文档,便会自动生成新页面,可以大大节省工作量。
3.因时因人而变:即当不同时间、不同用户访问同一网址时会出现不同页面。
此外动态网页是与静态网页相对应的,也就是说,网页URL的后缀不是.htm、.html、.shtml、.xml等静态网页的常见形式,而是以.asp、.jsp、.php、.perl、.cgi等形式为后缀。在动态网页网址中有一个标志性的符号——“?”
网站基本概念
服务器概念
服务器(server),也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
服务器的构成包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
在网络环境下,根据服务器提供的服务类型不同,分为文件服务器,数据库服务器,应用程序服务器,WEB服务器等。
服务器:能够提供服务的机器,取决于机器上所安装的软件(服务软件)
Web服务器:提供web服务(网站访问),就需要安装web服务软件,Apache,tomcat,iis等
IP的概念
IP:Internet Protocol,网络之间互联协议。网络之间互连的协议也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。IP地址具有唯一性。(每台电脑都有一个唯一的IP地址)
域名
域名(Domain Name),是由一串用点分隔的名字组成(www.itcast.cn)的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。域名是一个IP地址上有“面具” 。一个域名的目的是便于记忆和沟通的一组服务器的地址(网站,电子邮件,FTP等)。域名作为力所能及难忘的互联网参与者的名称。
特殊IP:127.0.0.1,代表本机
特殊域名:localhost
DNS
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
用户输入域名localhost—》DNS(localhost 127.0.0.1)--》服务器电脑
端口
端口(Port),可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。
用户输入域名localhost:端口—》DNS(localhost 127.0.0.1)--》服务器电脑—》软件(服务)
Web程序的访问流程
Web分为两类:静态网站和动态网站
浏览器发起访问—》DNS解析域名—》服务器电脑---》服务软件
静态网站访问
动态网站访问
动态网站访问流程与静态差不多,但是会多出几个内容:服务器端解析、数据库
PHP基础
PHP代码标记
在PHP历史发展中,可以使用多种标记来区分PHP脚本
ASP标记:<% php代码 %>
短标记:<? Php代码 ?>,以上两种基本弃用,如果要使用那么需要在配置文件中开启
脚本标记:<script language=”php”>php代码</script>
标准标记(常用):<?php php代码?>
PHP注释
习惯:所有的代码在写的过程中都必须进行注释,对于初学者而言,注释就是个人学习和写代码的一个思路说明
PHP中注释分为两种:行注释和块注释
行注释:一次注释一行
//:后面跟的所有内容都是注释
#:与//一样
块注释:一次注释多行
/*:中间直到*/出现之前,全部都是注释
*/
PHP语句分隔符
语句分隔符:在PHP中,代码是以行为单位,系统需要通过判断行的结束,该结束通常都是一个符号:分号“;”(英文状态下的分号)
定义
定义内容:
$a = 5;
Echo ‘hello world’;
特殊说明:
1、 PHP中标记结束符?>有自带语句结束符的效果,最后一行PHP代码可以没有语句结束符“;”
2、 PHP中其实很多代码的书写并不是嵌入到HTML中,而是单独存在,通常书写习惯中就不建议使用标记结束符?>,PHP会自动从开始到代码结束的全部部分认为是PHP代码,从而解析。(如果使用标记结束符?>,那就从开始到结束符?都视为PHP代码)
然后语法严格就加上?>
变量
PHP是一种动态网站开发的脚本语言,动态语言特点是交互性,会有数据的传递,而PHP作为“中间人”,需要进行数据的传递,传递的前提就是PHP能自己存储数据(临时存储)
变量基本概念
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的。
1、 变量是用来存储数据的;
2、 变量是存在名字的;
3、 变量是通过名字来访问的:数据;
4、 变量是可以改变的:数据。
变量的使用
PHP中的所有变量都必须使用“$”符号
1、 定义:在系统中增加对应的变量名字(内存)
2、 赋值:可以将数据赋值给变量名(可以在定义的同时完成)
3、 可以通过变量名访问存储的数据
4、 可以将变量从内存中删除
变量命名规则
1、 在PHP中变量名字必须以“$”符号开始;
2、 名字由字母、数字和下划线“_”构成,但是不能以数字开头;
3、 在PHP中本身还允许中文变量(不建议)。
预定义变量
预定义变量:提前定义的变量,系统定义的变量,存储许多需要用到的数据(预定义变量都是数组)
$_GET:获取所有表单以get方式提交的数据
$_POST:POST提交的数据都会保存在此
$_REQUEST:GET和POST提交的都会保存
$GLOBALS:PHP中所有的全局变量
$_SERVER:服务器信息
$_SESSION:session会话数据
$_COOKIE:cookie会话数据
$_ENV:环境信息
$_FILES:用户上传的文件信息
可变变量
可变变量:如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值:在变量前面再多加一个$符号。
$a = ‘b’;
$b = ‘bb’;
$$a输出的结果就是bb
<?php //可变变量 //定义两个变量 $a = 'b'; $b = 'bb'; echo $$a;
变量传值
将一个变量赋值给另外一个变量:变量传值
变量传值一共有两种方式:值传递,引用传递
值传递:将变量保存的值赋值一份,然后将新的值给另外一个变量保存(两个变量没有关系)
引用传递:将变量保存的值所在的内存地址,传递给另外一个变量:两个变量指向同一块内存空间(两个变量是同一个值)
$新变量 = &$老变量;
在内存中,通常有以下几个分区
栈区:程序可以操作的内存部分(不存数据,运行程序代码),少但是快
代码段:存储程序的内存部分(不执行)
数据段:存储普通数据(全局区和静态区)
堆区:存储复杂数据,大但是效率低
代码实现:
<?php //PHP变量传值 //值传递 $a = 10; $b = $a; $b = 5; echo $a,'<br/>',$b,'<br/>'; //引用传递 $c = 10; $d = &$c; $c = 5; echo $c,'<br/>',$d,'<br/>';
常量
常量与变量一样,都是用来保存数据的。
常量基本概念
常量:const/constant,是一种在程序运行当中,不可改变的量(数据)
常量一旦定义,通常数据不可改变(用户级别)
常量定义形式
在PHP中常量有两种定义方式(5.3之后才有两种)
1、 使用定义常量的函数:define(‘常量名’,常量值);
2、 5.3之后才有的:const 长两名 = 值;
常量名字的命名规则
1、 常量不需要使用“$”符号,一旦使用系统就会认为是变量;
2、 常量的名字组成由字母、数字和下划线组成,不能以数字开头;
3、 常量的名字通常是以大写字母为主(与变量以示区别);
4、 常量命名的规则比变量要松散,可以使用一些特殊字符,该方式只能使用define定义;
注意细节:
1、 Define和const定义的常量是有区别:在于访问权限区别
2、 定义常量通常不区分大小写,但是可以区分,可以参照define函数的第三个参数
常量使用形式
常量的使用与变量一样:不可改变值(在定义的时候必须赋值)
有的时候还需要使用另外一种形式来访问(针对的是特殊名字的常量),需要用到另外一个访问常量的函数:constant(‘常量名’)
说明:常量和变量的使用
1、 凡是数据会可能变化的,那么肯定是用变量
2、 数据不一定会变的,可以使用常量或者变量(变量居多)
3、 数据不允许被修改的,一定用常量
系统常量
系统常量:系统帮助用户定义的常量,用户可以直接使用
常用的几个系统常量
PHP_VERSION:PHP版本号
PHP_INT_SIZE:整形大小
PHP_INT_MAX:整形能表示的最大值(PHP中整形是允许出现负数:带符号)
在PHP中还有一些特殊的常量,他们有双下划线开始+长两名+双下划线结束,这种常量称之为系统魔术常量:魔术常量的值通常会跟着环境变化,但是用户改变不了
__DIR__:当前被执行的脚本所在电脑的绝对路径
__FILE__:当前被执行的脚本所在的电脑的绝对路径(带自己文件的名字)
__LINE__:当前所属的行数
__NAMESPACE__:当前所属的命名空间
__CLASS__:当前所属的类
__METHOD__:当前所属的方法
附上总代码:
<?php //PHP常量 //使用函数定义常量:define define('PI',3.14); //使用const关键字定义 const PII = 3; //定义特殊常量 define('-_-','smile'); //const -_- = 'smile'; //错误 //使用常量 echo PI; //echo -_-; //特殊符号不能直接使用 echo constant('-_-'); //系统常量 echo '<hr/>',PHP_VERSION,'<br/>',PHP_INT_SIZE,'<br/>',PHP_INT_MAX; //魔术常量 echo '<hr/>'; echo __DIR__,'<br/>',__FILE__,'<br/>',__LINE__,'<br/>'; echo __LINE__;
数据类型
数据类型:data type,在PHP中指的是存储的数据本身的类型,而不是变量的类型。PHP是一种弱类型语言,变量本身没有数据类型。
PHP的八种数据类型
在PHP中将数据分为三大类八小类:
简单(基本)数据类型:4个小类
整型:int/integer,系统分配4个字节存储,表示整数类型(有前提)
浮点型:float/double,系统分配8个字节存储,表示小数或者整型存不下的整数
注:在PHP中,float和double没有区别。
字符串型:string,系统根据实际长度分配,表示字符串(引号)
布尔类型:bool/boolean,表示布尔类型,只有两个值:true和false
复合数据类型:2个小类
对象类型:object,存放对象(面向对象)
数组类型:array,存储多个数据(一次性)
特殊数据类型:2个小类
资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件)
空类型:NULL,只有一个值就是NULL(不能运算)
类型转换
类型转换:在很多的条件下,需要指定的数据类型,需要外部数据(当前PHP取得的数据),转换成目标数据类型
在PHP中有两种类型转换方式:
1、 自动转换:系统根据需求自己判定,自己转换(用的比较多,效率偏低)
2、 强制(手动)转换:认为根据需要的目标类型转换
强制转换规则:在变量之前增加一个括号(),然后在里面写上对应类型:int/integer….其中NULL类型用到unset()
在转换过程中,用的比较多的就是转布尔类型(判断)和转数值类型(算术运算)
其他类型转布尔类型:true或者false,在PHP中比较少类型换变成false:
最左边的转换从布尔类型的对照表(最右边是布尔类型)
其他类型转数值的说明
1、 布尔true为1,false为0;
2、 字符串转数值有自己的规则
2.1 以字母开头的字符串,永远为0;
2.2 以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)
类型判断
通过一组类型判断函数,来判断变量,最终返回这个变量所保存数据的数据类型(相同结果为true,失败为false):是一组以is_开头后面跟类型名字的函数:is_XXX(变量名)
Bool类型不能用echo来查看,可以使用var_dump结构查看
var_dump() 函数用于输出变量的相关信息。
var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
PHP 版本要求: PHP 4, PHP 5, PHP 7
语法
Var_dump(变量1,变量2…)
<?php $a = array(1, 2, array("a", "b", "c")); var_dump($a); ?>
<?php $b = 3.1; $c = true; var_dump($b, $c); ?>
还有一组函数可以用来获取以及设定数据(变量)的类型
Gettype(变量名):获取类型,得到的是该类型对应的字符串
Settype(变量名,类型):设定数据类型:与强制转换不同
1、 强制转换(类型)变量名,是对数据值复制的内容进行处理(不会处理实际存储的内容)
2、 settype会直接改变数据本身
附上代码:
<?php //数据类型 //创建数据 $a = 'abc1.1.1'; $b = '1.1.1abc'; //自动转换 echo $a + $b; //算术+运算,系统先转换成数值类型(整型和浮点型),然后运算 //强制转换 echo '<br/>',(float)$a,(float)$b; //判断数据类型 echo '<hr/>'; var_dump(is_int($a)); //false var_dump(is_string($a)); //true echo '<hr/>'; echo gettype($a),'<br/>'; //设置类型 var_dump(settype($b,'int')); echo gettype($b),$b;
整数类型
整数类型:保存整数数值(范围限制),4个字节存储数据,最大就是32位:42亿多。但是在PHP中默认是有符号类型(区分正负数)
在PHP中提供了四种整型的定义方式:十进制定义,二进制定义,八进制定义和十六进制定义
$a = 120; //10进制
$a=0b110; //2进制
$a=0120; //8进制
$a=0x120; //16进制
十进制:逢10进1,能够出现的数字是0-9
二进制:逢2进1,能够出现的数字是0-1
八进制:逢8进1,能够出现的数字是0-7
十六进制:逢16进1,能够出现的数字是0-9以及a-f,a表示10,依次类推
进制转换:手动转换
10进制转二进制:除2倒取余法
不管得到的结果如何,需要补足32位:前面补0:00000000 00000000 00000000 00001010
10进制转二进制:取出最大的2的N次方,直到结果为0
二进制到十进制之间的转换:从右侧开始,将对应的第几位作为2的指数,然后将所有的结果相加
PHP中不需要用户这么复杂的去计算,提供了很多的函数进行转换
Decbin():十进制转二进制
Decoct():十进制转八进制
Dechex():十进制转十六进制
Bindec():二进制转十进制
浮点类型
浮点型:小数类型以及超过整型所能存储范围的整数(不保证精度),精度范围大概在15个有效数字左右
浮点型定义有两种方式:
$f = 1.23;
$f = 1.23e10; //科学计数法,其中e表示底10
简单说明浮点数为什么同样的字节数存储数据,但是却能表示更大的数据呢?
00000000 00000000 00000000 00000000 -> 11111111 11111111 11111111 1111111 (整形最大值:所有位都是有效数据)
浮点数:红色7位算的结果是10的指数,后面三个字节存储表示具体数值
00000000 00000000 00000000 00000000 -> 11111111 11111111 11111111 1111111
尽量不用用浮点数做精确判断:浮点数保存的数据不够精确,而且在计算机中凡是小数基本上存的都不准确
<?php //简单数据类型:整型、浮点型和布尔型 //定义4种整型数据 $a1 = 110; $a2 = 0b110; $a3 = 0110; $a4 = 0x110; echo $a1,'~',$a2,'~',$a3,'~',$a4,'<hr/>'; //默认的PHP输出数值都会自动转换成10进制输出 /* 十进制转二进制 10 ---》8 + 2 ---》2^3 + 2^1 ---》从二进制右侧开始,按照对应的指数次位置补1,没有的补0 从最后侧开始:00000000 00000000 00000000 00001010 二进制转十进制 01101011 ==>从右侧开始 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 + 1*2^6 + 0*2^7 == 1 + 2 + 0 + 8 + 0 + 32 + 64 + 0 == 107 */ //利用进制函数运算 //var_dump(decbin(107)); //浮点数 $f1 = 1.23; $f2 = 1.23e10; $f3 = PHP_INT_MAX + 1; //整型超过自身存储的大小之后会用浮点型存储 var_dump($f1,$f2,$f3); //浮点数判断 $f4 = 0.7; $f5 = 2.1; $f6 = $f5 / 3; //var_dump($f4 == $f6); echo '<hr/>'; //布尔类型 $b1 = true; $b2 = FALSE; var_dump($b1,$b2);
布尔类型
布尔类型:两个值true和false,通常是用于判断比较
在进行某些数据判断的时候,需要特别注意类型转换
Empty():判断数据的值是否为“空”,不是NULL,如果为空返回true,不为空返回false
Isset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false