一、变量与常量...
1、变量:与代数类似,可以给 PHP 变量赋予某个值(x=5)或者表达式(z=x+y)。
变量可以是很短的名称(如 x 和 y)或者更具描述性的名称。
注意事项:
1、(PHP都是以一个美元符开始$)
2、以字母或下划线开头
3、只能包含字母、数字、下划线。其中,数字不能放开头!
4、不要与PHP预留的关键字相同
5、对大小写敏感(大小写要统一不然不是同一个变量)
6、尽量定义有意义的名称来描述变量(如密码可以使用$password)方便自己也方便他人看明白
赋值运算符”=”给变量赋值,有两种赋值方法:传值赋值和引用赋值-----
创建(声明)PHP变量
PHP 没有声明变量的命令。
变量在您第一次赋值给它的时候被创建:
<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>
- 1-2传值赋值(可以为确定的数字,字符串也可以是表达式)
-------传值赋值是将变量的值复制出一份新的值(值是一样的),只是在内存中出现两份不同的内存空间。将新值内存空间地址赋值给新的变量名字。修改两个变量的值时还不影响。例如:将$a变量的值复制出一份存放到$b变量中.将$a变量的值复制出一份存放到$b变量中因为他们各自指向自己的内存区域.指向自己的内存区域。
<?php
$a = 1; //为变量a分配一个内存空间,保存数字1
$b = “hello!” //为变量b分配一个内存空间,保存字符串hello!
$c = 5+6 //为变量c分配一个内存空间,保存表达式5+6的值11
$d = $a //为变量d分配一个内存空间,把$a的赋值给$d,$d保存$a的值1.$a和$d是两个不同的独立的空间,改变一个另一个不会受到影响。
?>
1-3引用赋值
引用赋值是将变量的引用复制出来一份(新的引用还是指向原来的值)。
<?php
$b =$a //$b和$a是两个相同的空间(改变值也会更改另一个值),会相互影响。
?>
1-4可变变量
所谓可变变量就是一个变量以另外一个变量的值作为变量名。. 这种语法形式是 PHP 的特殊语法,其他语言中很少见。. 一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。. 利用这一特性我们可以动态的设置和使用一个变量的变量名。. 声明可变变量的方法非常简单,只需要在变量名前加上至少两个“$”符号即可,示例代码如下:
<?php
$name = “Jack”; //定义一个为Jack的变量$name
$$name = “sar”; //定义一个可变变量$$name为sar
?>
2、常量
PHP常量是一个简单值的标识符。. 该值在脚本中不能改变。. 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。. (常量名不需要加 $ 修饰符)。PHP中的常量是什么?
常量是一个简单值的标识符(名字)常量值被定义后,在脚本的其他任何地方都不能被改变。
注意事项:
1、遵循同样的命名规则(执行的时候,值不能变,常量和变量一样)
2、常量前面不能用$!!
3、常量没有设置指定的参数的话,默认为大小写敏感(对于大小写区分的很严重)!!
4、常量名称通常全部使用大小写字母
5、PHP使用define()函数定义常量!
定义语法为:define(name,value,case_insensitive)
Name,常量的名称,必要!
Value,常量的值,必要!
Case_insensitive,设置大小写敏感问题,TRUE为不敏感、FALSE为敏感!!
例代码如下:
<?php
Define(“PI”,3.14); //创建一个名称大小写敏感的常量PI,数值为数字3.14
Define(“GREETING”,”hello”,TRUE); //创建一个大小写不敏感的常量GREETING值为hello
?>
使用方法(代码):
<?php
define(“PI”,3.14159); //定义常量PI,赋值为3.14159
$radiusofRound = 8.5; //定义变量圆的半径,并赋值
$areaOfRound = $radiusOfRound*PI; //定义变量圆面积,并计算圆面积
Echo “圆的面积为:{$areaOfRound}”; //显示圆面积数据
?>
2.1命名规范
Pascal 大小写
单字之间不以空格断开或连接号(-)、底线(_)连结,第一个单字首字母采用大写字母;后续单字的首字母亦用大写字母,例如:FirstName、LastName。每一个单字的首字母都采用大写字母的命名格式,被称为“Pascal命名法”,源自于Pascal语言的命名惯例(适用于全局变量、类的字段成员、类的成员方法,都是使用Pascal大小写)
多用于给类、方法(函数)和属性(属性的本质是get和set两个函数)命名的规范,每个单词的首字母大写。如HighSchoolStudent。
方法命名一般用动词,变量命名一般按功能或方法的返回值命名。如 int max= , GetMax()。
Camel 大小写
多用于给普通变量(局部变量)和字段命名的规范,第一个单词的首字母小写,其余的单词首字母大写。如变量highSchoolStudent,字段要加下划线,如_highSchoolStudent。(适用局部变量)
- 数据类型
PHP支持九大类型
如下:
四种常用数据类型:integer(整型)、float(浮点型---也可以叫double)、Boolean(布尔型)、string(字符串)
三种复合类型:array(数组)、object(对象)、callable(可调用)
两种特殊类型:resource(资源)、NULL(空数据)
依次讲解:
- integer(整型)
整型数据的值为整数。
整数:十进制、十六进制(前缀0x)、八进制(前缀0)、二进制(前缀0b)
整数必须有至少一个数字(0-9)
整数不能包含逗号或空格
整数不能有小数点
整数正负均可
最大的为9E18,如果超过这个范围,就会溢出,被迫为浮点型----
<?php
$x = 6; //十进制
$x = -345; //负数
$x = 0x8c;//十六进制
$x = 047;//八进制
$x = 0b111; //二进制
?>
浮点型:(浮点数、双精度数、实数)是有小数点或指数形式的数字
浮点数的精度有限(不能比较是否相等)
<?php
$x = 25.326;
$x = 8.4e6;
$x = 2E-3;
?>
布尔型:表示逻辑上判断是否为真,是否为假。
只有两种取值:TRUE、FALSE。(true---false)
不区分大小写
- 用于函数的条件测试。
- 除了本身的判断以外还有:
- 整数的0
- 浮点数的0.0
- 空字符串和字符串“0”
- 不包含任何元素的数组
- 特殊类型NULL,包括未赋值的变量
字符串:是由一系列的字符组成,例如:”hello”,每一个都存储在一个字节里面,PHP字符最多可以存储2GB
一对单引号或者一对双引号把一组字符包括起来就可以说是一个字符串
例如:”aaa”,’aaa’.都是定义了字符串---但是在处理方面有着很大的不同
单引号:定义的字符串---对于单引号和反斜线,使用前,在前面加一个反斜线(\)来进行转义,别的字符和任何反斜线都原样输出-----
代码:
<?php
Echo ‘i\’m here’; //输出i’m here
Echo ‘c:\\*.doc’;//输出c:\*.doc
Echo ‘He said,\”Yes!”’;//输出He said, \”Yes”
Echo ‘{$a} is a number.’;//输出{$a} is a number.
?>
双引号:定义的字符串可以对特殊的转义字符进行解析:
双引号的转义字符
转义字符 | 含 义 | 转义字符 | 含 义 |
\n | 换行 | \f | 换页 |
\r | 回车 | \\ | 反斜线 |
\t | 水平制表符 | \” | 双引号 |
\v | 垂直制表符 | \$ | 美元标记符 |
\e | Escape |
双引号----代码:
<?php
Echo “I\’m here.”; //输出I\’m here.
Echo “C:\\*.doc”; //输出c:\*.doc
Echo “He said,\”Yes!\””; //输出He said “Yes!”
?>
注意:用双引号最重要的特点就是变量会被解析,在编写的时候可以用一对花括号({})来明确变量名的界线。如:(在双引号中)
<?php
$a = 25;
Echo “{$a} is a number”; //输出25 is number.
?>
注意:代码中的”{$a}”变量被输出出来了!!!
注意:”.”运算符可以连接后面的字符串,如:(在双引号中)
<?php
Echo “Sun”.”Earth”; //输出SunEarth
?>
(在开发web程序时,需要对字符串处理,PHP提供了多个函数来处理常用的字符串操作)
(第三章函数):
Strlen(string)
Strlen(string)函数用于返回字符串的长度(按照字符串所占的字节数来计算)
英文字符占1个字节(为一个长度),一个utf-8的中文字符3个字节(为三个长度),一个GBK的中文字符2个字节(为两个长度)------代码如:
<?php
Echo strlen(“hello,php!”); //输出10
Echo strlen(“你好,php!”); //输出11(utf-8)
Echo strlen(“你好,php!”); //输出9(GBK)
?>
注意:strlen()函数适合用于英文字符,对含有中文字符的处理上要根据文件的编码,容易混。
Mb_strlen(string,encoding)
Mb_strlen(string,encoding)用于返回字符串的长度,多字节的字符记为1.
参数1(String)就是你要输入的字符串(要计算的字符串),参数2(encoding)就是字符串的编码类型
<?php
Echo mb_strlen(“你好,php!”,”utf-8”); //输出7
?>
Strpos(string1,string2,offset)
Strpos(string1,string2,offset)用于查看一串字符串中指定一个字符找出字符第一次出现的位置。
参数1(string1)就是你要输入的字符串(要计算的字符串),参数2(string2)就是你要查找的字符串,参数3(offset)指定一个搜索的位置
注意:如果匹配到就会返回第一次匹配的位置,如果从0开始找,没有找到就会返回FALSE:
对大小写敏感,如果要不区分大小写的话就用stripos()函数
代码如下
<?php
Echo strpos(“good morning”,”morning”); //输出5
?>
Substr(string,start,length)用于返回字符串的字串(返回输出你找的地方)
参数1(string)就是你要输入的字符串(要计算的字符串),参数2(指定字符串中的字串开始的位置)【注意如果是从0开始的话,如果是负数;就会从末尾往前】,参数3(length)指定返回的子字符串的长度(字符串里面的长度),不指定的话就是从开始指定的地方到结尾,代码如下:
<?php
Echo substr(“Good Morning!”,5); //输出:Morning
Echo substr(“Good Morning!”,5,4); //输出:Morn
Echo substr(“Good Morning!”,-5); //输出:ning!
Echo substr(“Good Morning!”,-4,3); //输出:ing
?>
注意:如果原来的字符串中包含中文的字符串的话,使用substr这个函数的话可能会出现乱码的情况,此时需要加上mb_substr()函数!
<?php
$newsTitle=”世界睡眠日:规律作息,健康睡眠”;//定义变量
$lenOfTitle=mb_strlen($newsTitle,”utf-8”);//获取变量($newsTitle的文字)
If($lenOfTitle>10){ //如果超过10个字符
Echo mb_substr($newsTitle,0,10,”utf-8”).”......”;
//截取$newsTitle前十个字符,后面连接省略号
}
?>
数组:↓
数组(创建数组与访问数组单元):
PHP的数组中可以分为索引数组和关联数组(都是可以用array()函数)
Array函数在php5.4开始,用一对[]方括号替代
如果要访问数组单元,使用语法[键名]
索引数组
索引数组的键就是数字----两种方法:自动分配索引-----手动分配索引
代码如↓(创建一个变量,名为words的索引数组)自动索引
<?php
$words = [“good”,”bar”,”code”,”night”];
?>
注意:
索引默认是从0开始,下一个会在后面自动加1,如↑代码可以用
$words[0]---对应good---$words[1]---对应bar...依次类推
手动索引
代码:↓
<?php
$colors=array(); //创建的数组
$colors[0]=”red”; //手动分配索引(自己输)
$colors[1]=”yellow”; //手动分配索引(自己定义索引值)
?>
注意:手动定义两个一模一样的索引,后面的覆盖前面的
关联数组
意:字符串或者字符串和数字的混合(和索引相同,创建也有两种方法)
代码↓自动索引相同
<?php
$proce=
[“pen”=>60,
“cup”=>12,
“milk”=>32,
]
?>
和索引中的手动方法一样↓
<?php
$proce=array();
$proce=[“pen”]=60;
$proce=[“cup”]=12;
$proce=[“milk”]=32;
?>
注意:键名可以是选项----没有给指定的键名,PHP就会自动将当前的最大整数索引值加上1作为新的键名。如果当前的没有整数索引,键名则为0
-----创建数组单元的访问
<?php
$proce= //创建数组
[“pen”=>60,
“cup”=>12,
“milk”=>32,
]
Echo “pen:”.$proce[“pen”].”<br/>”; //输出数组中的元素
?>
编辑数组
意:添加或者删除(数组)其中的任何一个元素,是通过在[]符号中定任何一个元素的键名来实现。如果不存在这个键名,就会添加到数组里面。如果有这个键名,就会修改成对应的元素的值
(数组函数):
Unset()-----删除数组中其中一个元素所用----代码如↓ //函数
<?php
$proce= //创建数组
[“pen”=>60,
“cup”=>12,
“milk”=>32,
]
$proce[“abc”]=”12”; //添加的话
$proce[“pen”]=”30”; //修改的话
Unset($proce[“abc”]); //删除的话
Echo “pen:”.$proce[“pen”].”<br/>”; //输出数组中的元素”
?>
Count()-----计算数组中的元素的个数↓ //函数
输出$proce数组的元素个数
Echo ‘$proce数组中有’.count($proce).’元素。<br/>’;
Sort()↑、rsort()↓-----意为按升序或者降序排序,重新建立索引值
输出$proce数组
Echo ‘<br/><br/>对$proce数组排序(sort),按照元素值升序排序,重新建立索引’;
Sort($proce);
Var_dump($proce);
Arsort↓、asort()↑------意为按升序或者降序排序,原来的键/值不变(按照数组元素)
Echo ‘<br/><br/>对$proce数组排序(sort),按照元素值升序排序,键/值不变’;
asort($proce);
Var_dump($proce);
Ksort()↑、krsort()↓-----意为按升序或者降序排序,原来的键/值不变(按照键名)
Echo ‘<br/><br/>对$proce数组排序(sort),按照元素值升序排序,键/值不变’;
ksort($proce);
Var_dump($proce);
List()-----把数组中的值赋值给另一组变量
List($d1,$d2,$d3)=$proce;
Echo “<br/><br/>They like {$d1},{d2},{d3}”;
对象
类与对象
- 对象:实际存在该类事物中每个实物的个体。$a =new User(); 实例化后的$a
- 引用:php的别名,两个不同的变量名字指向相同的内容
- 封装: 把对象的属性和方法组织在一个类(逻辑单元)里
- 继承:以原有的类为基础,创建一个新类,从而代码复用的目的;
- 多态:允许将子类类型的指针赋值给父类类型的指针。
必须使用class关键字来声明类
<?php
Class Myclass{
//声明属性
//声明方法
}
?>
注意:
- 每个类的定义都要以关键字class开头
- 接类名---在接一对{}符号
- 包括里面的类的方法和属性
NULL
意:数据类型只有一个值,不区分大小写的常量(NULL)
表示一个变量没有值
<?php
$x=”你好,欢迎用PHP!”;
$x=NULL; //变量$x清空数值
?>
注意:在几个情况中被默认成NULL
- 被赋值为NULL
- 没有赋值
- 对变量使用了unset()函数
数据类型检查
<?php
$num = 123;
if(is_array($num)){
echo '这是一个数组';
}else if(is_string($num)){
echo '这是一个字符串';
}else if(is_int($num)){
echo '这是一个整数';
}else if(is_double($num)){
echo '这是一个浮点数';
}
?>
数据类型检查
函数 | 解析 |
Is_int()、is_integt()、is_long() | 整数 |
Is_float()、is_real()、is_double() | 浮点数 |
Is_string() | 字符串 |
Is_bool() | 布尔型 |
Is_array() | 数组 |
Is_object() | 对象类型 |
Is_null() | NULL |
Is_numeric() | 数字或者数字字符串 |
注意:可以使用is_type()检查是否为某种数据类型!
强制类型转换
PHP可以使用强制类型转换:
用()来转换(在要转换的变量前加上用括号包含起来的目标类型)
强制转换类型
Int--integer | 整型 |
Bool--boolean | 布尔类型 |
Float--double--real | 浮点型 |
string | 字符串 |
array | 数组 |
object | 对象 |
unset | NULL |
Binary | 二进制字符串 |
数据类型转换函数
函数 | 解析 |
Intval() | 整型 |
Floatval() | 浮点型 |
Strval() | 字符串 |
Boolval() | 布尔型 |
Settype()----可以将指定的变量转换成指定的数据类型
Settype(var,type)
有七个可以选择的值:int--float--integer--array--null--object--string
成功的话就会返回TRUE,否则返回FALSE
数据类型转换(具有特点)↓
整数或浮点转换成字符串时,数字将作为字符串的值
布尔类型转换为字符型值为TRUE时输出”1”;值为FALSE时输出”0”
字符串转换成整型或者浮点型的时候,该字符就会以符合规则的值开始,使用该数字(可能有小数)作为转换后的值,否则为0,合法的数值为可选(正负号、一个或多个数字及可选的指数部分),指数部分由(“e”或者”E”),后面跟着一个或多个数字
浮点转整型,向下取整
运算符
运算符---包括(+ - * /)和new
算术运算符
+:$a + $b 加 $a加上$b -:$a - $b 减 $a减去$b *:$a * $b 乘 $a乘以$b /:$a / $b 除 $a除以$b %: $a % $b 取模 $a除以$b的余数 如果两个操作数都是整型值(字符串将被转换为整型值),除号("/") 返回整型值(整除的值)。如果任一个操作数是浮点值,则做浮点除法。
字符串运算符
字符串操作符只有字符串连接符 (".")。 $a = "Hello "; $b = $a . "World!"; // now $b = "Hello World!"
赋值运算符
基本的赋值运算符是 "="。 一个赋值表达式的值就是所赋给的值。例如, 表达式 $a = 3 的值是3。 这允许你这样做一些复杂的事情: $a = ($b = 4) + 5; // 现在 $a 等于 9, $b为4 。 除了基本赋值符外,还有"复合运算符"。对于所有的二进制数和字符串,允许你做变量自我复合运算。
例如: =: $a = 3; +=:$a += 5; // 把$a 设成 8, 也就是: $a = $a + 5; $b = "Hello "; :$b .= "There!"; // 把 $b 设成 "Hello There!", 就象 $b = $b . "There!";
位运算符
位运算允许你对指定的数据置位或复位。&:与运算,$a & $b 与 $a和$b都被置位则结果被置位 |:或运算,$a | $b 或 $a或$b有一个被置位则结果被置位~:非运算,~ $a 非 $a没有被置位则结果被置位
逻辑运算符
and: $a and $b 与 $a和$b同时为真则结果为真 or : $a or $b 或 $a或$b有一个为真则结果为真 xor: $a xor $b 异或 $a和$b不同时为真则结果为真 ! : ! $a 非 $a为假则结果为真 &&: $a && $b 与 $a和$b同时为真则结果为真 ||:$a || $b 或 $a或$b有一个为真则结果为真 比较两个变量时,"与"和"或"运算有两种运算符这是以为两种运算符有不同的优先级 6、 比较运算符 比较运算符,就象名字一样,允许你比较两个值。 ==: $a == $b 等于 $a等于$b结果为真 !=: $a != $b 不等于 $a不等于$b结果为真 < : $a < $b 小于 $a小于$结果为真 > : $a > $b 大于 $a大于$b结果为真 <=: $a <= $b 小于等于 $a小于或等于$b结果为真 >=: $a >= $b 大于等于 $a大于或等于$b结果为真
算术运算符(主要用于整数和实数的算术运算)
算术运算符 | 名称 | 实例 | 说明 |
- | 取负 | -$a | $a的负值 |
+ | 加法 | $a+$b | $a和$b的和 |
- | 减法 | $a-$b | $a和$b的差 |
* | 乘法 | $a*$b | $a和$b的积 |
/ | 除法 | $a/$b | $a和$b的商 |
% | 取模 | $a%$b | $a除以$b的余数 |
** | 幂运算 | $a**$b | $a的$b次方 |
赋值运算符(就是一个变量传一个新值)
赋值运算符 | 名称 | 实例 | 等同于 | 说明 |
= | 赋值 | $a=$b | $a=$b | 将右运算符侧表达式的值赋值给左侧的 |
+= | 加法赋值 | $a+=$b | $a=$a+$b | 相加 |
-= | 减法赋值 | $a-=$b | $a=$a-$b | 相减 |
*= | 乘法赋值 | $a*=$b | $a=$a*$b | 相乘 |
/= | 除法赋值 | $a/=$b | $a=$a/$b | 相除 |
%= | 取模赋值 | $a%=$b | $a=$a%$b | 求模 |
字符串运算符
字符串运算符 | 名称 | 实例 | 说明 |
. | 连接 | $a.$b | 返回左、右参数连接后的字符串 |
.= | 连接赋值 | $a.=$b | 将右侧参数连接到左侧的后面 |
递增/递减运算符(和C语言一样先加减或者后加减)
递增/递减运算符 | 名称 | 说明 |
++$a | 前递增 | $a的值加1,然后返回$a |
$a++ | 后递增 | 返回$a,然后将$a的值加1 |
--$a | 前递减 | $a的值减1,然后返回$a |
$a-- | 后递减 | 返回$a,然后将$a的值减1 |
比较运算符(就是允许两个值进行对比,作比较)
运算符 | 名称 | 例子 | 结果 |
== | 等于 | $x == $y | 如果 $x 等于 $y,则返回 true。 |
=== | 全等(完全相同) | $x === $y | 如果 $x 等于 $y,且它们类型相同,则返回 true。 |
!= | 不等于 | $x != $y | 如果 $x 不等于 $y,则返回 true。 |
<> | 不等于 | $x <> $y | 如果 $x 不等于 $y,则返回 true。 |
!== | 不全等(完全不同) | $x !== $y | 如果 $x 不等于 $y,或它们类型不相同,则返回 true。 |
> | 大于 | $x > $y | 如果 $x 大于 $y,则返回 true。 |
< | 小于 | $x < $y | 如果 $x 小于 $y,则返回 true。 |
>= | 大于或等于 | $x >= $y | 如果 $x 大于或者等于 $y,则返回 true. |
<= | 小于或等于 | $x <= $y | 如果 $x 小于或者等于 $y,则返回 true。 |
<=> | 太空船运算符 | $x<=>$y | 如果$a>、=、<$b,分别返回一个<、>、=0的整数 |
??...?? | NULL合并操作符 | $a??$b??$c | 返回从左到右第一个存在且不为NULL的操作数。如果都没有定义NULL或者不为NULL,然后返回NULL |
注意:比较一个数字和字符串的时候,或者比较涉及数字内容的字符串,PHP会进行自动转数值来比较
逻辑运算符
运算符 | 名称 | 例子 | 结果 |
and | 与 | $x and $y | 如果 $x 和 $y 都为 true,则返回 true。 |
or | 或 | $x or $y | 如果 $x 和 $y 至少有一个为 true,则返回 true。 |
xor | 异或 | $x xor $y | 如果 $x 和 $y 有且仅有一个为 true,则返回 true。 |
&& | 与 | $x && $y | 如果 $x 和 $y 都为 true,则返回 true。 |
|| | 或 | $x || $y | 如果 $x 和 $y 至少有一个为 true,则返回 true。 |
! | 非 | !$x | 如果 $x 不为 true,则返回 true。 |
“与”和”或’都有两个不同形式的运算符,这两种具有不同的运算优先级
数组运算符
运算符 | 名称 | 例子 | 结果 |
+ | 联合 | $x + $y | $x 和 $y 的联合(但不覆盖重复的键) |
== | 相等 | $x == $y | 如果 $x 和 $y 拥有相同的键/值对,则返回 true。 |
=== | 全等 | $x === $y | 如果 $x 和 $y 拥有相同的键/值对,且顺序相同类型相同,则返回 true。 |
!= | 不相等 | $x != $y | 如果 $x 不等于 $y,则返回 true。 |
<> | 不相等 | $x <> $y | 如果 $x 不等于 $y,则返回 true。 |
!== | 不全等 | $x !== $y | 如果 $x 与 $y 完全不同,则返回 true。 |
运算符的优先级
clone new:复制对象、创建对象,无结合方向。
[:数组,结合方向左。
**:幂运算,结合方向右。
++ -- ~ (int) (float) (string) (array) (object) (bool) @:递增/递减、位取反、类型转换,结合方向右。
instanceof:类型,无结合方向。
!:逻辑非,结合方向右。
* / %:乘法、除法、取余,结合方向左。
+ - .:加法、减法、字符串连接,结合方向左。
<< >>:左移、右移,结合方向左。
< <= > >=:小于、小于等于、大于、大于等于,无结合方向。
== != === !== <> <=>:等于、不等于、全等、不全等、不等、比较运算符,无结合方向。
&:位与、引用,结合方向左。
^:位异或,结合方向左。
|:位或,结合方向左。
&&:逻辑与,结合方向左。
||:逻辑或,结合方向左。
??:null合并操作符,结合方向左。
?::三目运算符,结合方向左。
= += -= *= **= /= .= %= &= |= ^= <<= >>=:赋值运算符,结合方向右。
and:逻辑与,结合方向左。
xor:逻辑异或,结合方向左。
or:逻辑或,结合方向左。
运算符优先级决定了运算的顺序,运算级高的先计算,如果优先级相同,那么运算符的结合方向决定了该如何运算。通过使用括号可以强制改变优先级。
流程控制语句
条件语句↓
If语句
if 语句 - 如果指定条件为真,则执行代码(在指定条件为 true 时执行代码)
代码↓
if (条件) {
当条件为 true 时执行的代码;
}
例子:
<?php
$d=date("H");
if ($d<"20") {
echo "Have a good day!";
}
?>
if...else 语句 - 如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码
if (条件) {
条件为 true 时执行的代码;
} else {
条件为 false 时执行的代码;
}
实例如下:
<?php
$t=date("H");
if ($t<"20") {
echo "Have a good day!";
} else {
echo "Have a good night!";
}
?>
if...elseif....else 语句 - 根据两个以上的条件执行不同的代码块
If(条件){
条件为TRUE时执行的代码;
}else if(condition){
条件为true时执行的代码;
}else{
条件为false时执行的代码;
}
代码如下:
<?php
$t=date("H");
if ($t<"10") {
echo "Have a good morning!";
} elseif ($t<"20") {
echo "Have a good day!";
} else {
echo "Have a good night!";
}
?>
Switch语句
如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。
使用 Switch 语句可以避免很长的 if..elseif..else 代码块
switch (expression)
{
case label1:
expression = label1 时执行的代码 ;
break;
case label2:
expression = label2 时执行的代码 ;
break;
default:
表达式的值不等于 label1 及 label2 时执行的代码;
}
例子:
<?php
$favfruit="orange";
switch ($favfruit) {
case "apple":
echo "Your favorite fruit is apple!";
break;
case "banana":
echo "Your favorite fruit is banana!";
break;
case "orange":
echo "Your favorite fruit is orange!";
break;
default:
echo "Your favorite fruit is neither apple, banana, or orange!";
}
?>
注意事项:
对表达式(通常是变量)进行一次计算
把表达式的值与结构中 case 的值进行比较
如果存在匹配,则执行与 case 关联的代码
代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
如果没有 case 为真,则使用 default 语句
循环语句
While循环
用于重复执行的一组语句(while - 只要指定条件为真,则循环代码)
---------while循环,do-while循环、for循环、foreach循环
while (条件为真) {
要执行的代码;
}
例子:
<?php
$x=1;
while($x<=5) {
echo "这个数字是:$x <br>";
$x++;
}
?>
do-while循环↓
do-while 循环首先会执行一次代码块,然后检查条件,如果指定条件为真,则重复循环。
语法:↓
do {
要执行的代码;
} while (条件为真);
代码如下:↓
<?php
$x=1;
do {
echo "这个数字是:$x <br>";
$x++;
} while ($x<=5);
?>
注意循环只在执行循环内的语句之后才对条件进行测试。
for循环
表达式1通常是循环体的初始值,表达式2通常是布尔类型的,表达式3递增/递减
For循环如下(语法):
For(表达式1;表达式2;表达式3){
循环体;
}
代码如下:
<?php
for ($x=0; $x<=10; $x++) {
echo "数字是:$x <br>";
}
?>
foreach循环
Foreach(数组 as 变量){
循环体;
}
注意:每一次的循环,当前的值就会被赋给变量,并且数组内部的指针向前一步,直到最后一个数组元素结束循环
Foreach(数组 as 变量1 =>变量2){
循环体;
}
注意:每次循环中都会将当前数组元素的键名和值分别赋值给变量1和变量2
跳转语句
意:跳转语句用于进行无条件跳转。(常用break和continue)
Break:用于跳出包含它的(Switch、while、do-while、for、foreach)结束时可以指定调到哪
语法:break n;
Continue:用来跳过本次循环并在条件求值为真时继续执行下一次循环(不退出循环体)和break一样也可以跳出指定循环,默认值是1,即跳到末尾
函数(可以在程序中重复使用的语句块)
创建与调用函数
定义函数要用function开头,后面要接(),在接{}。(也可以创建自定义的函数)
语法:
Function functionage{
语句
}
注意事项:
- 以字母或下划线开头,后面跟字母、数字、下划线
- 和变量名不同的地方在于它对大小写不敏感!
函数参数(函数参数用于向函数传递信息)
定义函数参数
语法----function functionage($arg1,$arg2,...){
语句
}
注意:在调用函数时,需要向函数传递对应的参数。一般情况是按值传递。
引用传递参数(默认情况参数按照值传递,原参数的值复制一份在传递)内部改变了参数的值,那么并不会对变量的原值产生任何影响----”&”表示引用参数
注意:引用符号”&”只能在定义函数时使用,在调用函数时不使用引用符号
默认参数值(函数定义参数的默认值,调用函数时没有传递这个参数,就会自动默认值)
允许使用:标量、数组、NULL、作为默认参数---常量表达式
必须先定义所有的非默认参数,在定义默认参数
· 可变数量的参数
对于用户自定义的函数----还支持可变数量的参数----用“...”来实现可变数量的参数
函数返回值
可以使用return来返回值---return会立即停止函数的执行(在return后面的代码用不了)
return语句不能一次返回多个值
变量作用域
局部变量与全局变量
全局作用域(全局变量不能在局部作用域中使用)
全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global $a;(全局变量中使用的)
或者用$GLOBALS(关联数组--每一个变量都是它的一个元素,键名对应变量名-值对应变量值)-----替换global
在函数外部定义的变量,它的作用域从定义处一直到文件结尾
超全局变量作用域在所有脚本都有效。所以,在函数可直接使用。比如 $_GET,$_SERVER都是超全局变量。除$_GET,$_POST,$_SERVER,$_COOKIE等之外的超全局变量保存在$GLOBALS数组中。注意,不要误写成$_GLOBALS。有点受到$_POST的影响了。
<?php
$a=1; //全局
Function text(){
$b = 5; //局部
}
?>
$GLOBAL是一个特殊的php自定义的数组。超级全局变量。跟$_SERVER一样,都属于超全局变量。
局部作用域(同样局部变量不能在全局作用域中使用)
在函数内部中定义的变量,它的作用域为函数定义范围内
静态变量
函数执行完成后通常会清除所有的局部变量---如果需要保存局部变量的值,需要使用static关键字声明它为静态。
代码--↓
<?php
Function text(){
Static $b = 0; //声明静态变量
A++
}
?>
面向对象编程
类:用来抽象化描述对象的数据类型---包含数据形式和对数据的操作
俗称类的属性和方法---定义类之后,可以通过类的实例化创建对象
进而使用对象-----语法↓
[类--关键字] class 类名{
[属性]
[方法]
}
注意:
- 类名可以是任何非PHP关键字的合法名称,和变量命名规则相同
- 合法的类名以字母或下划线开头,后面可以是诺干个字母、数字、下划线
- 可以包含常量、变量、函数
- 类的变量成员叫属性----由(public---protected---private)开头
- 跟变量名---属性可以初始化(必须是常数)函数成员(方法)--用于访问对象的数据
构造函数和析构函数
- 构造函数可以接受参数,能够在创建对象时赋值给对象属性
- 构造函数可以调用类方法或其他函数
- 构造函数可以调用其他类的构造函数
注意:
- 构造函数通常以construct()表示construct前面必须要有两个下划线
- 析构函数-------(析构函数用法__destruct())
- 析构函数是在销毁对象时,自动调用,不能显示的调用。
- 析构函数不能带参数。
Function __construct($str) //构造函数
{
$this->name = $str;
}
Function __destruct($ste) //析构函数
{
Print(“destroying”).$this->name.”/n”;
}
PHP中---> this是指向当前对象的指针,代码实例↓
class User
{
public $_name;
}
代码:
class User
{
public $name;
function getName()
{
echo $this->name;
}
}
$user1 = new User();
$user1->name = 'leo';
$user1->getName(); //这里就会输出leo!
$user2 = new User();
$user2->name = 'nick';
$user2->getName(); //这里会输出nick!
上面创建了两个User对象。分别是 $user1 和 $user2 。
当调用 $user1->getName()的时候。 上面User类中的代码 echo $this->name ; 就是相当于是 echo $user1->name;
类的访问修饰词(关键字)
public(公共的、默认)
当类的成员被声明为public的访问修饰符时,该成员能被外部代码访问和操作。
protected(受保护的)
protected稍微有点复杂,被声明为protected的成员,只允许该类的子类进行访问。
private(私有的)
被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许访问。
如果定义方法时没有这些,默认为public
代码↓
public $name = 'lisa'; // 公共的访问权限
protected $money = 3000.00; // 受保护的权限
private $age = 35; // 私有的访问权限
对象
PHP用new关键字创建对象
创建一个对象(代码↓)
<?php
$aStudent=new Student();
?>
一个类通常包含属性、方法。举个���:有一个生产面包的机器(类),生成面包需要一些材料(属性),材料包含面粉、鸡蛋、水(不熟悉)。有了材料就可以运作生成面包了,这时机器会把准备好的材料放一起处理(方法)生成面包。
关键字也是很重要的概念,用来决定声明的属性或方法的可见性,包含: public、protected、private。一个属性或方法设置为 public 就代表无论在对象内还是对象外都可以被使用,比如面包机里如果有一个搅拌机(仅限如果),如果这个搅拌机设置为public,则这个搅拌机可以被任何品牌的面包机使用。如果设置为 protected,则只能在同品牌的面包机中使用(继承的类)。如果设置为private则只能被自己用。
对比方法,问什么使用对象?因为方便,没错真的方便。因为对象有以下几个特点:
- 封装性
- 继承
- 多态
封装:顾名思义,就是把类的属性和方法封装起来,设置权限(public|protected|private)
注意:封装的好处是安全、可控。
继承:使用private关键字定义属性,让外部的不能直接访问属性,使用public关键字定义的方法,外部才能通过调用public才能对属性访问
继承分类的方法或属性,只能继承public | protected 关键字声明的方法或属性。继承的主要作用是多个不同的类都需要同样的一个方法,可以使用继承。比如多个网站页面(每个页面都是单独的类)都需要验证是否登录,这时候可以定义一个父类,里面验证是否登录,再由需要验证登录的类继承,这样就不需要每个类都写一次验证
注意:不支持多重继承,一个类继承一个父类!
使用extends关键字声明继承
多态(接口)
多态可以通过接口(interface)来实现
Interface 接口名称
{
Public function 方法名称1();
Public function 方法名称2();
}
让具有继承关系的不同类对象重写类中的方法(两个类中有相同名称的方法),典型的应用是抽象类(abstract)和接口(interface)类
接口----类使用implements关键字来实现接口
Class 类名称 implements 接口名称
{
Public function 方法名称1(){
...
}
Public function 方法名称2(){
...
}
...
}
抽象类(特点)
定义为抽象的类不能被实例化。
如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法(这些方法的访问控制必须和父类中一样(或者更为宽松)。)
抽象类和抽象方法都要用abstract关键字来声明
一个类一个方法就是抽象方法(必须定义为抽象类)