注意:脚本标签的方式很少用,因为容易与javascript的标签混淆。
//PHP代码 ?>
默认的,PHP已经不支持短标签语法,需要在配置文件中开启
short_open_tag = on
<% //PHP代码 %>
asp 标签不能直接使用,需要开启php.ini中asp标签
语法:$变量名
强类型:C,JAVA ——先必须声明变量类型
弱类型:PHP
PHP是一种弱类型语言。指的是变量可以为任意类型,而不需要指定具体类型。
$age = 10; //age变量理论上可以放置任何数据类型的值
直接使用变量即可:前提条件是当前变量已经被赋值(定义)
输出:echo $变量名;
判断:if($变量名 == ‘值’)
将原有变量进行重新赋值
将变量所指向的值给释放掉(将变量本身释放)
unset($变量名);
系统定义的变量称之为预定义变量,预定义变量有9个:
通过一个得到一个变量的值,将该值再次当做一个变量名从而得到另外一个变量的值。
$$name
值传递:将一个变量的值赋值一份,然后赋值给新的变量
一个变量的变更不会影响另外一个变量的变更
引用传递:将一个变量的地址赋值给新的变量
在给变量赋值的时候,使用地址符号&获得一个变量的地址。
一旦被定义,就不能被修改,只能被使用的“量”叫做常量。
语法:define(‘常量名’,常量值);
三大数据类型:标量,复合,特殊
int或者integer,整数,包括正整数,负整数和0
$num = 5; //说num变量的数据类型,其实指的是num变量所指向的值5的数据类型
整型在系统内存中占4个字节保存数据。
八进制:数值以0开始,后面跟八进制序列
$num = 011; //十进制9
十六进制:数值以0x开始,后面跟十六进制序列
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
$num = 0x11; //十进制17
通常,float占用4个字节保存数据,单精度,表示7个精度
double占用8个字节保存数据,双精度,表示15个精度
实际上PHP中float也是占用8个字节保存数据
$float = 1.0; //普通的带小数的浮点数
$float = 2.3e3; //科学计数法保存的浮点数
因为浮点数会丢失精度,所以通常不用浮点数比较大小。
一般对于精度要求不是那么高的,但是数值又非常大的可以使用浮点数,其他情况下基本都不使用。
string,凡是带引号包好的字符都可以称之为字符串
表示方式:
语法:$str = <<< EOD//字符串内容EOD;
系统无法确定变量名从哪里结束
如何解决?
有人认为单引号比双引号的字符串效率要高,因为单引号不需要去解析其中的变量等内容,只要直接输出即可。
需要通过比较的形式来判断是否为FALSE
数组就是在内存里有一块连续的内存空间(堆空间),这里面可以保存多个数据,数据没有数据类型的限制。
关键字array
$arr = array(元素1,元素2,元素3…); //数据类型一定是数组
$arr[] = 元素1; //定义一个$arr变量,将元素1添加进来
$arr[] = 元素2; //将元素2添加到$arr变量中
数组本质是变量,访问的时候就是直接使用变量,但是因为数组元素有多个,而系统没有办法直接区分到底用户是访问的哪一个,所以需要用户在访问数组的时候,使用数组下标(键名)
定义方式:系统自动分配下标
系统分配所引方式
将数组里面的所有元素都取出来。
要求:
如果数组是一个关联数组,那么就完全不能使用for循环来进行遍历。
语法:foreach(数组 as 键值对$key => $value){
//使用$key当做当前元素的下标
//使用$value当做当前元素的值
}
每个数组都默认有一个指针(定位符),默认指向数组的第一个元素。如果在对数组使用循环遍历,那么该指针会在访问指针当前所指向的元素之后,将自己向下移动一位,指向下一个元素的地址。如果当指针遍历完最后一个元素,指针会继续下移,从而移除数据空间(元素),从而再次对数组元素进行访问的时候,返回FALSE。
list是一个语法结构,将得到的数组里的元素,必须是以0开始的索引元素,对应的赋值给list所指定的变量里。
语法:list($first,$second,$third) = array(‘张无忌’,20,’男’,’乾坤大挪移’);
$first = ‘张无忌’;
$second = 20;
$third = ‘男’;
因为each返回的结果里有两个索引元素0和1,所以一般使用list与each进行配对使用
list搭配each的好处:能够直接将数组的元素取出来,且赋值给变量,而在后续的程序中可以直接使用变量来操作。
数组的元素的值是一个数组数据类型。
array(
‘person1’ => array(‘name’ => ‘张无忌’,’age’ => 20,’power’ => ‘九阳神功’),
‘person2’ => array(‘name’ => ‘周芷若’,’age’ => 18,’power’ => ‘九阴白骨爪’)
);
$arr = array(); //新增
$arr[] = ‘泰山’;//新增元素
$arr[0] = ‘衡山’;//修改元素
echo $arr[0]; //查看元素
unset($arr[0]);//删除元素
栈:先进后出,压栈(把数据加入到栈里),出栈(把栈里的数据弹出来)
队列:先进先出,入队(从数组尾端插入数据),出队(把数组的元素,从头部出来)
以下四个函数
1. 都是对原数组进行操作。
2. 都会重置数组里面的索引。
range:按照ASCII码能够指定范围,自动生成数组元素的函数
//CAPTCHA:验证码,制作验证码随机字符串
array_rand:从数组中随机取出指定长度的个数的元素下标
shuffle:将原来的数组里的元素打乱
+:保存第一个数组的所有元素,如果后面的数组的元素与前面数组的元素的下标相同,那么就忽略,如果不同则加到第一个数组里,最终返回一个数组
array_merge():先保留第一个数组的所有元素,如果后面数组的元素与前面数组的元素关联下标相同则用后面数组的元素覆盖前面的;如果是索引下标,直接添加到第一个数组后面,重置索引。
==和===
对象
如PHP操作数据库中,mysql_connect连接成功返回的一个结果称之为资源(连接资源)
自动转换:系统根据操作所需要的类型将变量的值进行对应类型的转换
自动转换都是系统本身所做的事情,不需要用户去干预。
自动转换:字符串转数值
强制转换:我们根据具体的需求,将变量的值事先转换成所需的数据类型
语法:(数据类型)变量
设置数据类型:settype($var,’类型’) 《========》(类型)$var
PHP提供了一些列函数来判断数据的类型。函数都是以is_开头,后面跟数据类型。
如果是目标类型则返回TRUE,否则返回FALSE
算术运算符:+,-,*,/,%
赋值运算符:=,+=,-=,*=,/=,%=,.=
.=:将左边的变量与右边的变量连接起来,赋值给左边的变量
变量类型是整数型时,会自动将整型转换成字符串再进行拼接
比较运算符:>,>=,<,<=,==,!=,===,!==
如果两个比较的结果满足条件,那么返回真,否则返回假
===:两个变量的类型和值都相同才为真
抑制错误,不让错误出现
错误抑制符:@
参与运算的表达式有三个
语法:表达式1 ? 表达式2 : 表达式3
如果表达式1为真,那么计算表达式2,否则计算表达式3
自操作运算符:++,--
++:分为前置++和后置++,$a = $a + 1
前置++:++$a,
后置++:$a++
连接字符串
字符串运算符:.和.=
$a = ‘hello ’;
$b = ‘world’;
.:表示两个字符串连接,不会改变原来的变量本身
$c = $a . $b;
.=:将两个字符串连接起来后再赋值给左边的变量
$a .= $b <===========> $a = $a . $b;
针对系统硬盘上存储的位进行操作(实际操作是以字节为单位),位运算在计算过程中,每个位的操作返回的结果都是1或者0
PHP脚本执行结束后内存是如何处理的?
指的是当PHP引擎将用户请求的某个PHP脚本文件(index.php)的最后一行PHP代码执行完毕,称之为脚本执行结束。
PHP脚本所占用的所有内存都会被释放,被操作系统回收。
1.标签可以没有结束符号,如果在PHP代码之后没有任何其他非PHP代码,那么该结束标签可以没有
有结束标签:如果在结束标签之后还有额外的空格或者空行,PHP在解析的时候,会将该空格当做html的空格或者空行输出,会浪费带宽
如果PHP是嵌入到html代码中,那么建议最好使用结束标签,最后一个PHP结束标签可以没有(后面没有其他代码)
一般情况下,可以没有结束标签
2.PHP语句结束符:英文分号“;”
如果有PHP结束标签,那么最后一行PHP代码,可以没有语句结束符分号。
如果没有结束标签,那么不论哪一行代码都必须使用语句结束符
终止脚本执行,指的是通过一条语句告诉PHP引擎,此语句之后的其他语句不需要执行。
PHP提供了三种方式来终止脚本执行:return,die,exit
return:执行到该处退出,如果是在函数中,表示退出函数,如果是在脚本中,表示脚本停止执行
函数的return是返回函数调用的地方,脚本的return是返回给脚本被包含的地方。
if(条件){
//只要满足条件(条件为TRUE),那么执行语句块
//要执行的PHP代码
//如果不满足,则不执行if内部的语句块
}
if(条件){
//如果条件为TRUE,那么执行语句块1,不会执行语句块2
//语句块1
}else{
//如果条件为FALSE,那么执行语句块2,不会执行语句库1
//语句库2
}
if(条件1){
//语句块1
}elseif(条件2){
//语句块2
}elseif(条件3){
//语句块3
}
……
elseif只有PHP支持
switch(条件变量){
case 值1: //条件变量 == 值1
//语句块
break;//跳出当前分支,不再进行条件判断
case 值2:
。。。。
default:
//如果没有满足任何条件的语句
}
for(条件初始化;条件范围(判断);条件变化){
//循环体
//循环控制:continue,break
}
for(;;){
//循环体
//循环控制
}
for循环中往往在第一个条件里,可以写多个表达式,表达式之间用逗号分割。
遍历数组,从数组中获取一个元素,将元素的值和下标(键)都分别赋值给某个指定的变量,从而通过对变量的访问实现访问某个数组元素的值。
只判断循环条件,循环条件的变更是在循环体内的循环。
while(循环条件){
//循环体
//循环条件的变更
}
跟while循环是相似的,while循环是先判断条件后执行循环体,do-while不论如何会先执行一次循环体,然后再判断条件。
do{
//循环体
//循环条件变更
}while(条件)
字符:一个完整的符号,a,中
字节:由8位组成
一个字符最少等于一个字节:ASCII码,a,b,通常英文字符都是占用一个字节
中文在gbk或者gb2312编码里,占用两个字节
中文在utf-8里最少占用3个字节,有可能是4个字节
PHP中时间通常用整型存储
time:得到当前时间的时间戳,是一个整型数据
从1970年到当前时间的秒数称之为时间戳(格林威治时间)
PHP用来保存时间都是使用时间戳来处理,date函数可以将时间戳转化成时间
function 函数名(参数列表){
//函数体
//返回值
}
调用自定义函数与调用系统函数的方式一样
变量 = 函数名(参数列表);//如果函数有返回值,则可以使用变量接收函数的返回值,如果没有,则接收不到
跟变量的命名基本一致。
一般函数命名使用驼峰法和下划线方式
函数名字不能与已有关键字重复
函数名字是不区分大小写的,函数名字不能重复
函数不一定是在声明之后才能调用。
在声明函数的时候,为函数指定的参数,参数可以是多个,函数声明的时候的参数称之为形式参数(形参)
形参是没有值的。
如果函数声明时有形式参数,那么在调用该函数时必须传入对应的参数列表(PHP中可以多但是不能少)
函数在声明的时候,参数是形式参数,没有值
在调用函数的时候,穿进去的参数称之为实际参数,实际参数不参与函数内部函数体的运作。
实际参数会将自己的值复制一份,然后将复制的值赋值给形式参数
值传递:将实际参数复制一份,把复制的值赋值给形式参数
引用传递:将实际参数的所以内存的地址,赋值给形式参数
引用传递需要在定义函数的时候,在形式参数前面加上一个地址符号:&
传入的值必须是变量,而不能是具体的值
返回值:函数需要给外部传递的信息
语法:return 值
全局作用域:只能在函数外部使用
全局作用域是指的在函数外部定义的变量
局部作用域:只能在函数内部使用
局部作用域指的是在函数内部定义的变量
可以在局部作用域中使用$GLOBALS[‘全局作用域变量’]来访问全局作用域
注意:$GLOBALS就是指代全局作用域本身的变量
PHP还提供了一个关键字:global
global是将全局作用域的变量的地址,进行复制,然后在局部作用域内新建一个同名的变量名,将外部的地址赋值给局部变量。
语法:global 变量名;
变量名 = 值;
在定义函数的时候,给形式参数增加一个默认的值
function myfunc($i = 100){//函数体}
注意:默认值并不是在定义阶段就直接给形参赋值,是在调用函数的时候,如果对应的位置没有传入实际参数,那么系统会去函数空间(代码区)找到该参数定义时给定的默认值来当做形式参数的值(给形参赋值)
如果一个函数存在默认值,那么这个默认值所对应的形式参数就必须在形参列表的最后面
function myfunc($name = ‘张三’,$age){//函数体} //该形式是错误的,默认值必须在形参列表最后
function myfunc($age,$name= ‘张三’){//函数体} //正确
定义:变量 = function(参数列表){//函数体};
使用:变量(参数列表);
函数的定义在编辑阶段,会被系统存放到代码区,会有一个内存地址。需要通过变量来保存函数的内存地址。
匿名函数语法如下:
变量名 = function(参数列表){//函数体} ;
调用函数必须有括号。函数的调用实际是在栈里开辟内存空间,把函数体给加载进来,逐行执行。
2.1 通过变量保存的函数的内存地址,来讲函数给取出放到栈里
2.2 告诉系统该取出来的数据是一个函数,系统需要当做函数来处理,增加一个括号。
1. 是一种允许的语法结构
2. 一般是用于函数的参数
可变变量:将一个变量的值当做另外一个变量的名字,从而去的另外一个变量的值$$变量名
可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号(),让系统认为该值是一个函数,从而当做函数来执行。
语法:
//定义一个函数
function display(){
//函数体
}
//定义一个变量,其值刚好是函数的名字
$var = ‘display’;
//可变函数
$var();