php基础语法.docx
- 文档编号:28125797
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:23
- 大小:849.57KB
php基础语法.docx
《php基础语法.docx》由会员分享,可在线阅读,更多相关《php基础语法.docx(23页珍藏版)》请在冰豆网上搜索。
php基础语法
作业说明
进制转换,十进制101转成二进制,八进制。
两种都要会,一是手算,理解原理。
二是利用系统函数,
二进制:
bin
八进制:
oct
十进制:
dec
十六进制:
hex
其它进制转成十进制,参数是字符串。
$a=5,$b=10,不用第三个变量,交换两个数的值。
利用加减法(正解)
下面的方法也可以
利用循环及转义字符知识输出ASCII码中的可见字符。
提示:
32-126之间
一.类型转换
运算数在参加运算的时候,需要将类型转为相同,然后才进行计算。
在上面的例子中,第一个运算中,会先将$int转成浮点,然后和$f1相加,第二个运算中,会先将$str转成int类型,然后和$int相加。
在这个过程中,出现了类型转换。
在上面的例子中,转换是系统自己进行的。
弱类型和强类型。
在定义一个变量的时候,不需要指定变量的类型,它的类型由程序的上下文来决定的,比如$a=10,那就意味着$a是一个整型,$a=‘hello’,就意味着$a是一个字符串。
像这种确定变量类型的方式就是弱类型。
与之对应的就是强类型,比如C、java、C#等。
变量在参与运算的时候,类型发生了变化,但变量本身的类型并没有改变。
注意两点:
Ø在参与运算的多个操作数据之间,运算之前都需要将数据类型转成一致才可以。
Ø这并没有改变这些操作数本身的类型;改变的仅是这些操作数如何被求值以及表达式本身的类型。
通常有两种方式来完成类型转换:
Ø强制转换
Ø自动转换
强制转换,我们在需要转换的变量之前,使用类型关键字,用括号括起来。
Int或者interger
Float
Boolean
String
Array
Object
在PHP中,实现强制转换,在要转换的变量之前加上用括号括起来的目标类型即可。
Ø(int),(integer)-转换为整型(integer)
Ø(bool),(boolean)-转换为布尔型(boolean)
Ø(float),(double),(real)-转换为浮点型(float)
Ø(string)-转换为字符串(string)
Ø(array)-转换为数组(array)
Ø(object)-转换为对象(object)
Ø(unset)-转换为NULL
将其他类型转为资源类型是没有意义的。
强制转换在程序中,应用并不多,大部分情况下,使用自动类型转换就可以完成业务逻辑。
转换规则
转换成字符串
Ø一个整数或浮点数被转变为数字的字面样式的字符串
Ø一个booleanTRUE值被转换成字符串"1"。
BooleanFALSE被转换成""
Ø数组转换成字符串"Array"
Ø资源总会被转变成"Resourceid#1"这种结构的字符串
ØNULL总是被转变成空的字符串。
转换成整型
Ø从布尔值转换,FALSE将产生出0(零),TRUE将产生出1(壹)。
Ø从浮点数转换,当从浮点数转换成整数时,将向下取整。
Ø从字符串转换,如果字符串没有包含'.','e'或'E'并且数字值符合整数类型的限定,可被认定是一个integer,否则被认定为一个float。
字符串的开始部分给定了它的值,如果字符串以合法的数字开始,这个数字可直接使用。
否则,值就是0。
转换成布尔型
当转换为boolean时,以下值被认为是FALSE:
Ø布尔值FALSE自身
Ø整型值0(零)
Ø浮点型值0.0(零)
Ø空字符串,以及字符串"0"(注意"00"、"0.0"被认为是TRUE)
Ø空数组
Ø特殊类型NULL(包括尚未设定的变量)
所有其它值都被认为是TRUE(包括对象和资源)。
1和其它非零值(不论正负)一样,被认为是TRUE!
☞注意细节
ØHTML表单并不传递整数、浮点数或者布尔值,它们只传递字符串。
ØFALSE是一个布尔值而"false"是一个字符串。
数据类型相关函数
ØVar_dump:
打印变量的详细信息,包括类型和值
ØGettype:
获得类型
ØSettype:
设置类型
ØIs系列:
其中is_array会经常用到
ØIsset:
检查一个变量是否存在(设置)
ØEmpty:
检查一个变量是否为空
对于isset而言,只要声明过(有值),不管它的值是什么,那么就返回true
对于empty而言,相当于boolean(变量),然后再来取反。
简单例子
注意,在使用empty时候,要结合具体的业务逻辑类分析。
trim()函数移除字符串两侧的空白字符或其他预定义字符
二.运算符
能够实现某种运算功能的符号。
根据不同的功能,可以分为以下几大类:
Ø算术运算符
Ø赋值运算符
Ø字符串运算符
Ø比较运算符
Ø递增/递减运算符
Ø逻辑运算符
Ø位运算符
Ø错误控制运算符
Ø三目运算符
不同的运算符所对应的的运算数是不同的,单目、双目、三目。
一个运算符在进行运算的时候,需要确保运算数是一致的。
1.算术运算符
除法运算的结果,可能是浮点数,也可能是整数。
在取模运算中,如果有小数,则会去除小数部分。
在取模运算中,结果的正负取决于第一个数。
面试题:
执行程序段
phpecho8%(-3)?
>将输出
2.赋值运算符
就是=
$a=‘php’
[思考]:
$a=($b=4)+5;这行代码如何理解?
$a=9
赋值运算表达式的值也就是所赋的值。
也就是说,“$a=3”的值是3。
表达式也是有值的。
有时候我们还将=和其它的运算组合到一起,形成组合赋值。
$a=$a+5=>$a+=5;
3.字符串运算符
只有一个,就是点.,没有加号,
注意的是,点和赋值运算符一起形成组成赋值。
.=
4.比较运算符
比较运算符,比较两个运算数的关系,返回的结果是一个布尔值。
不等有两种写法,!
=和<>
☞注意细节
如果比较一个整数和字符串,则字符串会被转换为整数。
如果比较两个数字字符串,则作为整数比较。
===和==的区别。
比如0==false返回真,而0===false返回假。
5.递增递减运算符
++和--
根据其位置的不同,又分为前++,前--,后++,后--
前置和后置的区别?
不管是前置还是后置,变量的结果是一致的。
不同的运算的顺序,通过表达式来分析,前置,++$b,是先进行运算,然后再得到值,
而后置$b++,则是先得到值,然后进行运算。
☞注意细节
递增/递减运算符不影响布尔值。
递减NULL值也没有效果,但是递增NULL的结果是1
6.逻辑运算符
与:
两者都为true的情况才为trueand
或:
两者都为false的才为falseor
非:
非真即假,非假即真,直接取反。
!
异或:
xor,如果两者相异,结果为真,两者相同,结果为假。
之所以出现&&和and两种运算符,是由于它们的优先级不同。
短路运算:
在进行逻辑运算的时候,如果通过第一个参数已经能够确定整个表达式的值,那么就不会进行后面的运算。
对于与运算,如果第一个为假,则后面的不会进行计算。
对于或运算,如果第一个为真,则后面的不会进行计算
真实的代码:
7.位运算符
按位进行运算,
位,bit,是指二进制表示中的每一个数值。
010101
字节Byte,是由位构成的,通常是8bit00001010
1KB=1024Byte
1MB=1024KB
1GB=1024MB
1TB=1024GB
已知$a=9,$b=-4,分别求:
$a&$b,$a|$b,~$b,$a^$b,$a>>2,$b<<2的值。
位运算都是以二进制的形式来出现的。
同时要注意,二进制的表示形式有原码、反码、补码。
原码:
将十进制转成的二进制。
用最高位表示符号位,0表示正数,1表示负数。
反码:
对于正数,反码和原码相同
对于负数,符号位不变,其它位取反。
补码:
对于正数,补码和原码相同
对于负数,在反码的基础上+1。
计算机在底层进行运算的时候,是以补码的形式进行的。
Why?
$a&$b$a|$b的过程:
Ø右移:
低位溢出,符号位不变,高位用符号位补全(相当于除以2n然后取整)
Ø左移:
高位溢出,符号位不变,低位补0(相当于乘以2n)
$a>>2和$b<<2的运算过程:
不管是左移还是右移,它只会改变该数的大小,不改变符号,所以在移位操作的时候,符号位始终是不变的。
在实际编程的时候,经常会用一个位表示一种状态(或一个值)。
8.错误控制运算符
我们不期望看到错误,可以使用错误控制运算符进行屏蔽。
不是在每个会出现错误的地方使用这个运算,一般而言,对于我们无法控制的错误,比如去请求其它的资源的时候,可以使用。
☞注意细节
@运算符只对表达式有效。
不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。
9.三目运算符
从名字我们就可以得知,这个运算符有三个运算数。
?
:
表达式1?
表达式2:
表达式3
等价于一个简单的if……else语句
If(表达式1){
表达式2
}else{
表达式3
}
使用三目运算符可以简化程序。
10.其它特殊运算符
主要有以下几个:
=>数组运算符
表示键和值的对应关系
Array(‘os’=>‘Linux’
[]数组运算符
用于获取数组元素
->对象运算符
对象操作属性,以及方法的运算符
instanceof对象运算符
判断某个对象是否是类的实例。
:
:
域作用符,用在面向对象当中的。
11.结合性和优先级
先看一个问题:
多个运算数在参与运算的时候,要注意它们的顺序和优先级。
在程序当中,并不是所有的运算符都是由左向右的,有一些是从右向左,比如赋值=。
一般来说,单目运算符比双目运算符的优先级高。
=的优先级比较低,比它还低的有andorxor,
And和&&的区别
☞注意细节
Ø运算符优先级指定了两个表达式绑定得有多“紧密”。
Ø同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
Ø必要时可以用括号来强制改变优先级。
可以增强代码的可读性。
Ø&&||与andor的区别
Ø尽管=比其它大多数的运算符的优先级低,PHP仍旧允许类似如下的表达式:
if(!
$a=foo()),在此例中foo()的返回值被赋给了$a。
如果在编写代码的时候,对于运算比较复杂(运算符较多),可以使用()来改变优先级。
表达式
任何有值的东西,都是表达式。
赋值语句,函数的调用,
表达式本身也有值。
$b=($a=5)
$a=5是一个表达式,这个表达式本身有值,值就是$a的值。
三.流程控制
任何PHP脚本都是有一系列的语句组成,可以是一个赋值语句,一个函数的调用,也可以是一个空语句。
通过语言结构,来控制程序的执行的顺序,这就是流程控制。
通常有三大流程控制:
Ø顺序
Ø分支(选择)
Ø循环
一般而言,在编写程序之前,都会绘制一个图形的流程图。
尤其是对于那些业务逻辑比较复杂的程序。
绘制流程图常用的图例:
开始/结束
进程(流程)
判断
程序的走向
输入和输出
1.顺序结构
按照程序书写代码的顺序来执行。
2.分支结构
根据不同的条件,来执行不同的流程。
在php中,有两个系列,一个是if系列,一个是switch系列。
If系列
在if系列的分支结构中,又分为三种:
Ø单分支
Ø双分支
Ø多分支
单分支
是简单的一种的分支结构,if语句
双分支
向左走还是向右走的。
使用if……else来实现
多分支
要进行多次的条件判断,使用if……elseif……elseif……else
elseif还可以分开写elseif,分开写实际上是if……else的嵌套的写法。
两种写法的结果并没有什么不同的。
If语句的替代写法。
将{用:
来替代,将}用endif来替代。
注意elseif和else……if的替代语法的区别
作业
echocount("abc");输出什么?
(新浪?
)
自己编写程序,测试下面的结果
已知$a=9,$b=-4,分别求:
$a&$b,$a|$b,~$b,$a^$b,$a>>2,$b<<2的值。
面试题:
使用一句代码实现求三个数中的最大值,提示使用三目运算符。
输入一个分数,来判断它的等级,100A+,90-100A,80-90B70-80C60-70D,使用if的替代语法的形式来完成。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- php 基础 语法