php基础
PHP
PHP基本语法
1、PHP标记:<?php 代码块 ?>
理解:当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,这告诉 PHP 开始和停止解析二者之间的代码。
扩展:PHP允许使用短标记:<? 代码块 ?>。需要将php.ini中的short_open_tag = Off更改为short_open_tag = On
以前常用的一些PHP标记:
<script languange="php"> echo'这是脚本风格的标记'; </script>
phpinfo():查看php中加载的模块
2、PHP文件的访问方式:必须在浏览器中输入域名或IP,不然不解析
3、页面显示乱码:
header("content-type:text/html;charset=utf-8");
4、PHP注释:
单行注释: //
多行注释: /* */
注意:多行注释没有嵌套
5、可变变量
6、变量的命名规则(可以包含字母、数字、下划线,只能以字母或下划线开头)
7、PHP的连接符(.)
8、拷贝传值、引用传值
几个小函数
echo
输出
var_dump
print_r和var_dump都可以输出数组但是print_r中不显示数组元素的数据类型
描述:打印变量的相关信息
语法:void var_dump ( mixed $expression [, mixed $... ] )
说明:此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
print_r
描述:打印关于变量的易于理解的信息。
语法:bool print_r ( mixed $expression )
说明:如果给出的是 string、integer或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object与数组类似。
unset
删除变量unset()
描述:释放给定的变量、释放空间
语法:void unset ( mixed $var [, mixed $... ] )
返回:返回值为空 即不返回
empty
描述:检查一个变量是否为空
语法:bool empty ( mixed $var )
说明:如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、NULL、FALSE、array()、以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。"0"返回false
isset
描述:检测变量是否设置
语法:bool isset ( mixed $var [, mixed $... ] )
返回:如果 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。
数组
数组的概念
变量是一个值的容器,数组是多个值的容器。
数组的两种定义方式
$arr=array(1,2,3,"abc",5)
子主题 1
$arr=array(’name‘=>"name1",‘age’=>15,....)
数组的分类
枚举数组:下标为从0开始的正整数,就是”枚举数组”。如:$arr = array(10,20,30)
关联数组:下标为字符串的,就是”关联数组”。如:$arr = array(‘name’=>’张三’ , ‘sex’=> ‘男’);
混合数组:下标既有字符串的,也有整型的,两种下标都有。$arr = array(10,20,’name’=>’Mary’)
多维数组:数组元素还是数组。$arr = array(array(10,20))
多维数组
一个数组元素由两个部分构成:(1)下标(2)数组的值
下标的类型,只能是整型和字符串型;
数组元素的值,可以是任何类型(整型、浮点型、字符串型、布尔值、NULL、数组、对象、资源)。
多维数组:就是数组元素的值,是一个数组。
数组操作函数:
1、count()
描述:计算数组中的单元数目或对象中的属性个数
语法:int count ( mixed $var [, int $mode = COUNT_NORMAL ] )
参数:
$var,要统计的数组变量名称;
$mode可选,是否统计多维数组元素个数。1为统计多维,0只统计当前维数。
2、unset()
描述:释放给定的变量
语法:void unset ( mixed $var [, mixed $... ] )
说明:也可以删除一个数组元素,也可以删除整个数组。
数组元素指针的理解
每一个数组都有一个唯一数组指针;
数组初始化,指针总是指向第一个元素。
数组指针,总是指向一个数组元素;
数组指针,也可以指向数组末端(非法区域)
如果数组指针指向非法区域,则返回FALSE,foreach循环结束。
数组指针的函数
current():返回当前数组指针处元素的值,不移动指针;
key():返回当前数组指针处元素的下标,不移动指针;
next():返回下一个数组元素的值,并将指针下移一行;
prev():返回上一个数组元素的值,并将指针回退一步;
end():返回最后一个数组元素的值,并将指针移到数组最后一个元素。
reset():返回第一个数组元素的值,并将指针移到第一个元素上。
foreach
语法一:foreach($arr as $value){…}
语法二:foreach ($arr as $key => $value)
提示:$key代表下标,$value代表元素的值
数组操作函数
1、each()
描述:返回数组中当前的键/值对并将数组指针向前移动一步
语法:array each ( array &$array )
返回值:返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,单元 0 和 key 包含有数组单元的键名(下标),1 和 value 包含有数据。
提示:如果内部指针越过了数组的末端,则 each() 返回 FALSE。
2、list()
描述:把数组中的值赋给一些变量
语法:array list ( mixed $varname [, mixed $... ] )
遍历数组的三种方法
foreach($arr as $key => $value)
for(){key()current() next()}
while(list($key,$value)=each($arr))
数组排序
sort()
升序排,不保留索引关系
rsort()
降序排,不保留索引关系
asort()
升序排,保留索引关系
arsort()
降序排,保留索引关系
ksort()
数组按键名(下标)升序排列,保留索引关系
krsort()
数组按键名(下标)降序排列,保留索引关系
PHP超全局变量数组
以下8个变量,都是数组变量,又称为”预定义变量”。它们的名称是固定的,必须全大写,下划线开头。
具体
$_GET :通过地址栏传递到服务器的数据,必须是GET方式传递;
发送GET数据的方法:往地址栏发送数据有几种方式
(1)通过<a>向地址栏传数据
(2)JS也可以向地址发送数据
$_POST:通过表单 method = post 发送的数据,必须是POST方式传递。
$_REQUEST:包含GET方式 和POST方式的全部数据。
$_REQUEST可以同时获取GET和POST方式传递的数据。$_REQUEST速度比较慢,没有$_GET或$_POST速度快。平常不推荐使用。
$_SERVER:显示或获取服务器相关的信息。
获取服务器端的相关信息。每一次HTTP请求,$_SERVER数组中已经有了相关信息了。
$GLOBALS:全局中的全局,换话句:包含大部分的超全局数组信息。
$_SESSION:处理服务器的端的会话数据。
$_COOKIE:处理客户端的会话数据。
$_FILES:上传文件需要用到的数组。
PHP常量
1、概念
常量是值永远不变的量。如:身份证号码、DNA、圆周率等。
常量不能修改。
常量不能删除。
2、命名规则
常量的命名规则与变量一样,但不能加”$”符号;
常量名只能以字母、下划线开头,不能以数字开头;
常量尽量全大写,与变量区分开来;如:DB_HOST、TITLE、CONTENT
常量是区分大小写的;
3、常量定义define()
语法:bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
描述:定义一个常量
参数:
$name常量名称;
$value常量的值;
$ case_insensitive,是否大小写敏感,false(区分大小写),true不区分大小写
4、常量判断defined()
描述:检查某个名称的常量是否存在
语法:bool defined ( string $name )
提示:常量名称必须是一个字符串。
5、PHP预定义常量
子主题 6
PHP的系统常量,大约有800多个,可以通过get_defined_constants()函数来获取。
描述:返回所有常量的关联数组,键是常量名,值是常量值
语法:array get_defined_constants ([ bool $categorize = false ] )
参数:bool $categorize参数,是否显示二维数组,是否常量要分组。
PHP_VERSION:PHP版本号
PHP_OS:PHP操作系统
PHP_INT_MAX:PHP支持的最大整数
TRUE:既是常量,也是关键字;
FALSE:既是常量,也是关键字。
PHP魔术常量
魔术常量:在程序运行过程中,值可以改变的常量。
__LINE__:获取当前行号;
__FILE__:获取当前文件的绝对路径;
__DIR__:获取当前文件的目录;
__FUNCTION__:获取当前函数名;
__CLASS__:获取当前类名;
__METHOD__:获取当方法名
提示:get_defined_constants()中没有魔术常量。
PHP数据类型
标量(基本)数据类型:字符串型、整型、浮点型、布尔型;复合数据类型:数组、对象;特殊数据类型:资源、NULL
1、判断数据类型
var_dump():打印变量的类型和值;
is_bool():判断变量是否是布尔型;
is_int():判断变量是否是整型;
is_float():判断变是否是浮点型;
is_numeric():判断变量是不是数值型;
is_array():判断变量是否是数组;
is_string():判断变量是否是字符串;
is_null():判断变量是否为NULL
is_resource():判断变量否是资源型
2、整型
整型包括:正整数、负整数、零。
(1)整型的表示方法
十进制表示:$a = 90;
八进制表示:$a = 077; //以0开头就是八进制
十六进制表示:$a = 0x89FA; //以0x开头就是16进制
(2)最大整数(PHP_INT_MAX)
PHP中整数的范围:-2^31(-2147483648) ~ 2^31-1(2147483647)
如果一个整数超出范围,则转成浮点数。
3、浮点型:就是小数
浮点数的范围:1.8E-308 ~ 1.8E+308 E是以10为底。 1.8E5:是一种科学计数方式。1.8*10^5 = 180000
4、字符串型
(1)字符串定义的三种方式
用单引号,引起来的一串字符,就是字符串。
用双引号,引起来的一串字符,也是字符串。如:$a = “abc”
长字符串的表示:heredoc标识符
将一个长字符串,放在”<<<heredoc”和”heredoc;”之间;
“heredoc”这个名称可以自定义;
必须以”<<<heredoc”开头,必须以”heredoc;”结尾
“heredoc;”必须单独一行、必须顶头排。
长字符串中,可以放置HTML、CSS、JS、PHP的变量,但不能进行运算。
Heredoc的功能与双引号的功能一样,都可以解析PHP变量。
(2)注意事项
单引号内,输出的是变量的名称,不能解析变量;
双引号内,输出的是变量的值,可以解析变量;
在双引号内,如果一个变量后跟一个非空字符,会当成一个变量来处理,其实并没有这个变量。
5、布尔型
布尔型只有两个值true、false。
布尔型主要用在条件判断当中。
哪些值转成布尔型认为是FALSE
0、””、”0”、false、NULL、array()、空对象,转成布尔型都认为是FALSE。
6、空型:没有类型
如果一个变量不存在,则认为空型,空型只有一个值NULL。
哪些情况认为空?
不存在的变量;
Unset()某一个变量
7、资源型
PHP的功能很少,它需要加载第三方的插件来实现其它功能。那么,第三方插件,对于PHP来说,就是它的资源。如:MySQL、GD2、FileSystem等。
资源就是到第三方数据的一个引用,也称为”引用传值”。
PHP数据类型转换
强制转换
(int) $a ,强制转成整型;
(string)$a ,强制转成字符串;
(object)$a ,强制转成对象;
(bool) $a ,强制转成布尔值;
(float) $a ,强制转成浮点型
(array)$a ,强制转成数组型
自动转换
其它类型转成布尔型
其它类型转成数值型
其它类型转字符串
计算机进制
1、进制介绍
计算机底层的数据运算和存储都是二进制数据。
计算机语言就是二进制,计算机能直接识别二进制数据,其它数据都不能直接识别。
计算机的数据转换,基本都是操作系统自动转换的。
2、常用进制
十进制:有10个基本数字,分别为0、1、2、3、4、5、6、7、8、9,运算规则”逢十进一”;
八进制:有8个基本数字,分别为0、1、2、3、4、5、6、7,运算规则”逢八进一”
十六进制:有16个基本数字,分别为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,运算规则”逢十六进一”。
二进制:有2个基本数字,分别为0、1,运算规则”逢二进一”。 一个8进制数,可以用3个二进制数,来表示。如:(567)8 = (101 110 111)2
一个16进制数,可以用4位二进制数,来表示。如:(A23)16 = (1010 0010 0011)2
进制转换
10进制转成2进制
原理:除2取余法。第一次将整数除以2,取余数;然后,再将商除以2,再取余数;一直除下去,直到商为0,就除完了。最后读数时,从最后一位读起。
10进制转成8进制
原理:除8取余法。第一次将整数除以8,取余数;然后,再将商除以8,再取余数;一直除下去,直接商为0,就除完了。最后读数时,从最后一位读起。
10进制转成16进制
原理:除16取余法。第一次将整数除以16,取余数;然后,再将商除以16,再取余数;一直除下去,直接商为0,就除完了。最后读数时,从最后一位读起。
2进制转成10进制
原理:按权相加法。2进制每一位上的数,乘以所在的位权(指数常数),然后将各个乘积求和。
函数bindec()将二进制转成十进制。
8进制转成10进制
原理:按权相加法。8进制每一位上的数,乘以所在的位权(指数常数),然后将各个乘积求和。
函数octdec()将八进制转成十进制。
16进制转成10进制
原理:按权相加法。16进制每一位上的数,乘以所在的位权(指数常数),然后将各个乘积求和。
函数hexdec()将十六进制转成十进制。
函数
基本介绍
1、概述
2、函数定义格式
3、函数调用
4、函数参数
5、默认参数
PHP支持默认参数传递。
如果实参个数少于形参时,将用默认参数来代替实参。
提示:默认参数只能放在非默认参数的右边。
提示:默认参数的值,几乎所有类型都可以,但不能是函数调用、资源、对象。
PHP常用函数
判断变量的数据类型函数
is_string() 判断一个变量是不是字符串型;
is_bool() 判断一个变量是不是布尔型;
is_float() 判断一个变量是不是浮点型;
is_int() 判断一个变量是不是整型,不能判断字符串的整型;
is_numeric() 判断一个变量是不是数值型;
is_scalar() 判断一个变量是不是标量数据类型(整型、浮点型、字符型、布尔型);
is_array() 判断一个变量是不是数组型;
is_null() 判断一个变量是不是NULL型;
is_resource() 判断一个变量是不是资源型;
is_object() 判断一个变量是不是对象型。
数组和字符串转换函数
1、implode()
描述:将一个一维数组的值转化为字符串(数组转字符串)
语法:string implode ( string $glue , array $pieces )
参数:
$glue, 数组各元素之间的连接符号,默认为空字符串;
$pieces, 要连接的数组
2、explode()
描述:使用一个字符串分割另一个字符串(将字符串转成数组)
语法:array explode ( string $delimiter , string $string )
参数:
$delimiter, 是分割的字符串;
$string, 是要分割的原始字符串;
返回:是一个数组。
日期时间函数
1、time()
描述:返回当前的 Unix 时间戳
语法:int time ( void )
返回:返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
2、date()
描述:格式化一个本地时间/日期
语法:string date ( string $format [, int $timestamp ] )
参数:$timestamp, 提供的时间戳 $format, 格式化的字符串;代表要传递的时间戳。默认为当前时间戳。
3、strtotime()
描述:将任何英文文本的日期时间描述解析为 Unix 时间戳
语法:int strtotime ( string $time )
4、microtime()
描述:返回当前 Unix 时间戳和微秒数
语法:mixed microtime ( void )
返回:本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。
数学相关函数
1、abs()
2、ceil()
描述:进一法取整
3、floor()
描述:舍去法取整
4、round()
描述:对浮点数进行四舍五入
5、rand()
6、mt_rand()
描述:生成更好的随机数
语法:int mt_rand ( void ) 或 int mt_rand ( int $min , int $max )
提示:如果省略参数,则随机数的范围是0 ~ PHP_INT_MAX。
注意:mt_rand()产生随机数值的平均速度比 rand() 快四倍。
数组与键名和键值相关的两个函数
1、array_keys()
描述:返回数组中所有的键名
2、array_values()
描述:返回数组中所有的值
字符串函数
1、strlen()
描述:获取字符串长度
语法:int strlen ( string $string )
2、substr()
描述:返回字符串的子串
语法:string substr ( string $string , int $start [, int $length ] )
参数:$string是原始字符串
$start如果 start 是非负数,返回的字符串将从 string 的 start 位置开始,从 0 开始计算。例如,在字符串 "abcdef" 中,在位置 0 的字符是 "a",位置 2 的字符串是 "c" 等等。如果 start 是负数,返回的字符串将从 string 结尾处向前数第 start 个字符开始。如果 string 的长度小于或等于 start,将返回 FALSE。
$length返回多少个字符
3、strtoupper()
描述:将字符串转化为大写
语法:string strtoupper ( string $string )
4、strtolower()
描述:将字符串转化为小写
语法:string strtolower ( string $str )
5、ucfirst()
描述:ucfirst — 将字符串的首字母转换为大写
语法:string ucfirst ( string $str )
6、trim()(r ,l除去左边 右边的)
描述:除字符串首尾处的空白字符(或者其他字符)
语法:string trim ( string $str [, string $charlist = " \t\n\r\0\x0B" ] )
参数:此函数返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:
7、strrev()
描述:反转字符串
语法:string strrev ( string $string )
8、strpos()
描述:查找字符串首次出现的位置,从左往右查找。
语法:mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
参数:
$haystack, 原始字符串
$needle, 目标字符串
$offset, 索引偏移量
9、strrpos()
描述:计算指定字符串在目标字符串中最后一次出现的位置,从右往左查找。
语法:int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
10、strchr()和strstr()是一样的
描述:查找字符串的首次出现
语法:string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
参数:
$needle如果 needle 不是一个字符串,那么它将被转化为整型并且作为字符的序号来使用。
$haystack输入字符串。
$before_needle若为 TRUE,strstr() 将返回 needle 在 haystack 中的位置之前的部分。
返回:返回 haystack 字符串从 needle 第一次出现的位置开始到 haystack 结尾的字符串。
11、str_replace()
描述:子字符串替换
语法:mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
参数:
$search查找的目标值,也就是 needle。一个数组可以指定多个目标。
$replace , search 的替换值。一个数组可以被用来指定多重替换。
$subject执行替换的数组或者字符串。也就是 haystack。
$count如果被指定,它的值将被设置为替换发生的次数。
如果 search 和 replace 都是数组,它们的值将会被依次处理
12、str_repeat()
描述:重复一个字符串
语法:string str_repeat ( string $input , int $multiplier )
参数:
$input要重复的字符串
$multiplier重复的次数
改变脚本运行的几个函数
终止脚本运行 die()和exit()
描述:输出一个消息并且退出当前脚本。
语法:void exit ([ string $status ] )
参数:$status可选,是一个中断脚本执行前的提示信息。
提示:常用在检查程序错误时。
延缓脚本执行:sleep(n)
描述:相当于JS中的延时器setTimeout()
描述:延缓执行
语法:int sleep ( int $seconds )
参数:$seconds是延缓的秒数
PHP服务器端包含
用法:include “1.php” 或 include(“1.php”)
描述:include、require都是语法结构,不是真正的函数,因此后面的括号可带可不带。
1、Include和require的区别
include:将另一个文件的代码包到当前文件中执行,若包含文件不存在,报一个警告错误(E_WARNING),脚本会继续向下执行。
require:将另一个文件的代码包到当前文件中执行。若包含文件不存在,报一个致命错误(E_ERROR),脚本会终止执行。
提示:两个都是包含文件,但在处理错误时方式不一样。
2、include_once和include区别
include_once:将另一个文件的代码包到当前文件中执行。对包含的文件会进行判断,如果该文件曾经被包含过,则该文件就不会再包含了。
require_once:将另一个文件的代码包到当前文件中执行。对包含的文件会进行判断,如果该文件曾经被包含过,则该文件就不会再包含了。
提示:在一个脚本文件中,不能定义两个同名的函数(函数重载)。
使用include_once可以避免函数重载。
包含文件中的return语句
包含文件中的return语句,可以向include返回一个值。然后,再把该值存储一个变量
三个中断
break
结束整次循环
break [n] :n决定跳出第几次循环
continue
结束当次循环
return
两个判断&三个循环
if
while
dowhile
for
switch
运算符
算术运算符
+、-、*、/、%、++、--
算术运算符的运算结果,一定是数值型。
类型转换:如果两边的操作数不是数值型,要先转成数值型,再进行算术运算。
字符串运算符
. 和 .=
比较运算符:>、<、>=、<=、==、!=、===、!==
逻辑运算符:&&、||、!
错误控制运算符(@)
“@”主要用来屏蔽表达式的系统错误的。
可以用来屏蔽常量、变量、函数调用、include语句。
运算符优先级