笔记3运算符.docx
- 文档编号:25857092
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:24
- 大小:433.15KB
笔记3运算符.docx
《笔记3运算符.docx》由会员分享,可在线阅读,更多相关《笔记3运算符.docx(24页珍藏版)》请在冰豆网上搜索。
笔记3运算符
昨日回顾2
数据类型4
整体划分4
整数类型int,integer4
3种整数表示法4
进制转换问题4
浮点类型float,double,real8
有两种写法:
8
关于浮点数的细节知识9
字符串类型string10
布尔类型:
bool,boolean12
数组类型array13
对象类型object13
资源类型resource14
空类型null14
类型转换14
自动转换:
14
强制转换15
与类型相关的系统函数15
运算符16
算术运算符16
自增自减运算符:
17
前加加和后加加的区别:
17
比较运算符:
17
==和===的区别:
18
常见不同类型的比较(主要指标量类型的数据)——非正常比较18
逻辑运算符:
&&||!
18
逻辑与:
18
逻辑或:
19
逻辑非:
19
短路现象之逻辑与短路:
19
短路现象之逻辑或短路:
19
字符串运算符:
19
赋值运算符:
20
条件(三目)运算符:
20
昨日回顾
有关DirectoryIndex的说明:
DirectoryIndex作用:
当用户请求的地址中没有指定要访问的网页名称的时候,在由该指示器来设定返回给用户的网页——默认网页。
对于站点来说,就是主页。
它可以出现在主配置文件httpd.conf中,对全局有效。
也可以出现在virtualHost中,只对该虚拟主机有效
还可以出现在一个文件夹设定中(
变量的理解:
变量名和值的对应关系——引用关系,即使用该变量名,就是指使用该变量名所指代的变量值。
图示:
传值方式:
前提:
传值方式是专门指一个把变量的值传递给另一个变量的方式。
值传递:
将变量的值进行拷贝,然后把拷贝的新的值赋值给另一个变量。
引用传递:
将变量的引用关系进行拷贝,然后用此关系将数据跟另一个变量建立联系
在php中,默认变量之间传值,都是使用值传递。
如果想要实现引用传递,必须使用引用传递符号:
&
可变变量:
当一个变量的名字又是一个变量的时候,就称为可变变量。
形式上,通常就是两个(或以上)的“$”连续出现。
$abc=“v1”;
$v1=123;
echo$$abc;//理解:
$($abc)=>$v1=>123
预定义变量(超全局数组):
都是数组,都具有超全局作用域,都是系统自动维护。
$_GET:
通过get方式发送(提交)的数据集合。
有4种形式可以发送get数据:
。
。
。
a=5&b=10&c=xyz”>笑嘻嘻 上一行黄色的部分,叫做“连接参数”,查询字符串,还是$_SERVER[‘QUERY_STRING’] location.href=“abc.php? a=5&b=10&c=xyz”; location.assing(“abc.php? a=5&b=10&c=xyz”); 获取get数据形式只有一个: $_GET[‘数据名’] $_POST: 通过post方式发送(提交)的数据集合。 。 。 。 获取post数据形式只有一个: $_POST[‘数据名’] $_REQUEST: : 通过get和post方式发送(提交)的数据集合的全部。 $_SERVER: 其中存储了服务器端和客户端的相关信息。 SERVER_NAME, DOCUEMNT_ROOT SERVER_ADDR REMOTE_ADD PHP_SELF QUERY_STRING SCRIPT_FILENAME $GLOBALS: 常量: 定义形式: 使用函数定义: define(“常量名”,常量值) 使用const关键字: const常量名=常量值; 注: 常量值只能是标量类型(string,int,float,bool) 使用常量: 直接使用常量名: 使用函数: constant(“常量名”);比如: constC1=1; constC2=2; for($i=1;$i<=2;$i++){ echoconstant(“C”.$i); } 常量变量的区别: 定义形式,使用形式,作用域范围,可用类型不同。 判断常量是否存在: 就一个函数: defined(“常量名”) 使用一个未定义的常量(特殊情况): php会报一个notice错误,并又同时“认可”该常量,并且其值就是该常量的名字本身。 预定义常量: 有很多很多,M_PI,PHP_OS,PHP_VERSION,E_ERROR,... 魔术常量: 很少的几个而已: __DIR__,__FILE__,__LINE__ 数据类型 整体划分 ∙标量类型: int,float,string,bool ∙复合类型: array,object ∙特殊类型: null,resouce 整数类型int,integer 3种整数表示法 ∙十进制写法: 123: $n1=123; ∙八进制写法: 0123 $n2=0123; ∙十六进制写法: 0x123 $n3=0x123; 进制转换问题 先学习几个单词: dec: 十进制 bin: 二进制 oct: 八进制 hex: 十六进制 ∙十进制转二进制decbin(),除2取余倒着写 $v1=decbin(123);//注意: 参数必须是10进制数字,转换后的结果必然是二进制字符串。 我们也可以通过手工的方式来完成10进制转2进制的完整过程。 基本做法是: 将10进制数字除以2,并取得余数,如果除得的商不为0,则继续除以2,并继续去的余数,直到商为0。 然后将所有取得的余数,按“倒序写出”,就是对应的2进制数字: ∙十进制转八进制decoct(),除8取余倒着写 使用php系统函数: $r1=decoct(十进制数字);//结果是一个8进制数字字符串。 我们也可以通过手工的方式来完成10进制转8进制的完整过程。 基本做法是: 将10进制数字除以8,并取得余数,如果除得的商不为0,则继续除以8,并继续去的余数,直到商为0。 然后将所有取得的余数,按“倒序写出”,就是对应的8进制数字: ∙十进制转十六进制dechex(),除16取余倒着写 16进制的数字包括如下(从0开始): 0123456789ABCDEF 对应10进制其实是: 0123456789101112131415 系统函是: dechex(十进制数字),结果是16进制数字字符串。 手工运算: 基本做法是: 将10进制数字除以16,并取得余数,如果除得的商不为0,则继续除以16,并继续去的余数,直到商为0。 然后将所有取得的余数,按“倒序写出”,就是对应的16进制数字: ∙二进制转十进制bindec(),每位数值乘以2的权值然后相加 先理解一个“权值”概念: 就是某位数字上的该数字所代表的数的大小。 比如: 10进制数字1234,其代表: 1*103+2*102+3*101+4*100=1000+200+30+4; 这里,103,102,101,等等,就称为权值。 二进制转10进制,就是将每位数值乘以对应位上的权值,然后相加得到的结果。 用系统函数是: $v1=bindec(“二进制数字字符串”);//得到的结果是10进制数字 结果: 手工转换: 二进制数字的权值,从右到左,分别是: 20,21,22,23,24,25,..... 即分别是(10进制大小): 1,2,4,8,16,32 手工计算: 1010110 =1*26+0*XX+1*24+0*XX+1*22+1*21+0//说明,其中XX表示无所谓的数字值 =64+0+16+0+4+2+0 =86 ∙八进制转十进制octdec(),每位数值乘以8的权值然后相加 用系统函数是: $v1=octdec(“8进制数字字符串”);//得到的结果是10进制数字 结果: 手工算法统2进制转换为10进制,略。 ∙十六进制转十进制hexdec(),每位数值乘以16的权值然后相加 用系统函数是: $v1=hexdec(“16进制数字字符串”);//得到的结果是10进制数字 结果: ∙注意: 十进制转为其他进制结果是字符串,其他进制转为十进制要求给定数据是字符串形式 思考: $v1=bindec(123);//理解过程: bindec(“123”)=>bindec(“1”)=>1 $v2=bindec(0123);//理解: 0123是8进制数字,其10进制值为: 83,再当作二进制字符串就是“83”,结果就只能是0 $v3=bindec(“0123”);//理解: 因为直接就是字符串了,就当二进制字符串用,结果是1 $v4=octdec(0123);//理解: 0123是8进制数字,其10进制值为: 83,再当作8进制字符串就是“83”,但8进制中没有“8”这个数字,就只识别出一个“3”这个数字 以下代码测试: 浮点类型float,double,real 有两种写法: $v1=1.234;//带小数点,,就是浮点类型 $v2=1.234E3;//含义是: 1.234乘以10的3次方,即1234,带E的形式就是浮点数 $v3=1234E3;//结果值是1234000,但也是一个浮点数。 关于浮点数的细节知识 ∙10进制小数转二进制小数的做法: 乘2并顺序取整数部分 没有系统函数。 ∙浮点数不应直接进行大小比较 因为浮点数在系统内部(cpu级别),很可能都是不精确表达。 要想进行比较,我们只能考虑自己应用中的精度要求的基础上,将其转换为整数进行比较。 通常的做法是: 乘以10的精度位数数次方,比如精度要求3位有效数字,则乘以103次方 ∙当整数运算的结果超出整数的范围后,会自动转换为浮点数。 整数的范围,在32位系统下,大约正负20多亿 字符串类型string js中,虽然有2种字符串表达形式,但也应该理解为是一种字符串: varstr1=‘单引号字符串’ varstr2=“双引号字符串”; 但在php中,单引号和双引哈字符串,是有不同细节含义的字符串。 php中,有4种字符串形式: 单引号字符串: 结果: 双引号字符串: 结果: 更多的转义符见手册如下: nowdoc(单引号)定界符字符串: 输出结果为: heredoc(双引号)定界符字符串: 结果: 布尔类型: bool,boolean 用于标识某种只有两个状态值的数据: true,false——吃没吃,去没去,有没有。 。 。 。 。 在应用出,我们常常会(需要)直接将一个数据(可能是各种其他类型)当作一个布尔值来进行判断。 那么此时其实发生的是: 会将该数据隐含转换为布尔值。 最常见的语法形式就是: if(某数据/变量){ ................. } 那么,在php中,其他各种数据,隐含转换为布尔值的时候,会当作false的有: 0 0.0 null “” “0” array();//空数组 未定义的变量//当然要尽量避免 其他数据就当作true来看待了。 看手册: PHP手册〉附录〉类型比较表〉使用PHP函数对变量$x进行比较 数组类型array 标识一系列数据的“有序排列”的集合体。 php中,数组的下标可以使用整数或字符串。 数字下标常说“索引号”, 字符串下标常说“键名”。 实际上,在php的报错系统中,都叫做“index”,或offset 数组中还可以存储数组,就可以构成“多维数组”的形式。 数组遍历在php中有专门语法: foreach(数组名as下标变量$k=>值变量$v1){ //这里就是循环体,就可以使用两个变量$k,$v1 } 对象类型object 在php中,对象跟js中的有比较大的区别。 通常,js中的对象,有自定定义的(创建的),也有“现成”,比如window,location,标签对象。 但: php中的对象,通常都是指自己定义的对象,纯语法的。 资源类型resource ∙含义: 基本上都是指对外部数据的引用。 (数据非php代码生成的) 不是PHP语言通过某种语法形式“创造”的数据,而是外部本来就有该数据(比如数据库,文件,图片),PHP只是通过某种语法(或方式)来对其进行某些操作。 空类型null 只是一个计算机中编程领域的“概念”类型,只是为了表达变量所存储的数据的某种特殊情形所创建的概念——没有存数据,或没有存有效的有意义的数据 类型转换 自动转换: 通常自动转换是弱类语言的一个最基本也最方便的一个特征: 它会在各种运算中根据运算符的需要也将非该运算符所能处理的数据转换为可以处理的数据。 常见情形如下: ∙if(数据){}: 转为bool类型 ∙算术运算符: 转为数字类型 ∙连接运算符: 转为字符串类型 ∙比较运算符: 转为布尔类型或数字类型 o两边如果有至少一个布尔,则另一边就会转为布尔,并进行比较 o否则,就转为数字进行比较 特别常用的一个转换(不管是自动转换还是强制转换),就是字符串转换为数字: “5”==>>5//整数 “5.5”==>>5.5浮点数 “5abc”==>>5整数 “5.5ab”==>>5.5浮点数 “abc5”==>>0整数 “abc”==>>0整数 “”==>>0 强制转换 就是通过语法来让某数据转换为另一种类型的数据,语法格式为: (目标类型)数据; 注意: 我们并不能使用该语法将任意类型的数据,转换为其他任意类型——因为有些类型之间的转换是没有意义的——系统内部也没有定义过该类型转换的规则。 ——最常见的转换通常就发生在基本(标量)数据类型之间。 与类型相关的系c统函数 ∙var_dump(): 能够输出一个变量的完整信息。 ∙getType(): 获取一个变量的类型名称,结果是一个单词(字符串),setType();设置一个变量的类型,语法: setType(变量名,目标类型) ∙isset(),empty(),unset(); oisset()判断一个变量是否存在数据: oempty()判断一个数据是否为空: 接近我们的日常观念(没有就是空) ounset(): 销毁(删除)一个变量。 ∙is_XX类型()系列函数: 判断某个数据是否是某种类型,包括: ois_int(),is_float(),is_numeric(),is_bool(),is_array(),is_scalar(): is_numeric()对: 3,3.5,“3”,“3.14”判断都是true is_scalar(): 判断是否为标量类型(即int,float,stirng,bool) 运算符 算术运算符 有以下几个: +-*/%++-- ∙注意: 注意取余运算%,先取整,再取余 $v1=7.5%3;//结果是: 1 $v2=7.5%3.5;//结果是: 1 对比js中: ——js中,不会进行取整处理 varv1=7.5%3;//结果是: 1.5 varv2=7.5%3.5;//结果是: 0.5 自增自减运算符: ∙常规: 对数字进行自加1或自减1。 ∙字符串: 只能自增,且自增的效果就是“下一个字符” ∙布尔值递增递减无效 ∙null递减无效,递增结果为1 前加加和后加加的区别: ∙前++: 先完成变量的递增运算,再取得该变量的值参与别的运算。 ∙后++: 先将原来变量的值临时存储,再将变量值递增,最后再将临时存储的值参与别的运算。 ∙推论1: 如果独立语句中进行自加运算,前自加后自加没有区别。 ∙推论2: 如果前自加后自加是放在别的语句中,则会有所区别。 ∙推论3: 前加加比后加加效率略高(在循环中建议使用前加加)。 比较运算符: 包括: >>=<<===松散相等! ====严格相等! == ==和===的区别: ==: 松散相等,比较的是两个数据“类型转换之后”是否有可能相等,也常常认为是“数据内容是否相同” ===: 严格相等,全等,只有两个数据的类型和数据的内容都完全一致,才相等。 严重推荐参考手册〉〉附录〉〉类型比较表。 常见不同类型的比较(主要指标量类型的数据)——非正常比较 ∙正常比较——数字的大小比较 ∙如果有布尔值,均转为布尔值比较: 规则: true>false ∙否则,如果有数字,均转为数字比较: ∙否则,如果两边都是纯数字字符串,转为数字比较 ∙否则,就按字符串比较 字符串的比较规则为: 按字符的先后顺序依次一个一个比较,发现哪个大,则就表示整体大,后续不再比较 逻辑运算符: &&||! 前提: 都是针对布尔类型的值进行的运算,如果不是布尔,就会转换为布尔。 逻辑与: 规则(真值表): true&&true==>true; true&&false==>false false&&true==>false; false&&false==>false; 只有两个都是true,结果才是true 只要有一个是false,结果就是false 逻辑或: 规则(真值表): true||true==>true; true||false==>true false||true==>true; false||false==>false; 只有两个都是false,结果才是false 只要有一个是true,结果就是true 逻辑非: ! true==>false ! false===>true 短路现象之逻辑与短路: 在实际应用中,参与逻辑运算的数据,往往都不是直接的布尔值,而是有关计算之后的布尔结果值。 大致如下: if(IsFemale($uName)&&isAge($uName)>18){ ......echo“女士优先” } 此时,如果IsFemale()函数判断的结果是false,那么后续的函数isAge()就不再调用,自然也不再进行大于18的判断,这是就称为“短路现象” 短路现象之逻辑或短路: if(IsFemale($uName)||isAge($uName)<18){ ......echo“有限照顾女士或未成年人” } 此时,如果IsFemale()函数判断的结果是true,那么后续的函数isAge()就不再调用,自然也不再进行小于18的判断,这就是“或运算符短路现象” 字符串运算符: 只有一个: . 衍生一个: .= 会将运算符两边的数据转换为字符串。 对比js: +(具有双重含义,此时就需要一定的“判断”) 赋值运算符: 只有一个: = 衍生多个: +=-=*=/=%=.= 基本形式为: $变量符合赋值运算符数据2; 这些衍生的赋值运算符,是这种运算的一个简化形式: $v2=$v2[运算符]数据2;//某个变量跟另一个数据进行某种运算之后的结果再存入该变量 对比(它不是这种形式的简化): $v2=数据2[运算符]$v2;//这种形式不应该简化 条件(三目)运算符: 一般的运算符需要2个数据参与 有几个运算符只需要一个数据参与: ++,--! 则: 条件运算符就需要至少3个数据参与! 形式为: 数据1? 数据2: 数据3 通常,数据1最终应该是一个布尔值(如果不是,则会当作布尔值来使用)。 含义: 如果数据1为true,则运算结果为数据2,否则运算结果为数据3 典型举例: $score=66; $result1=$score>=60? “及格”: “不及格”;//结果是“及格” $result2=$score? “及格”: “不及格”;//结果是“及格”,但含义完全不同,因为即使分数是33,也是及格。 只有分数为0才是不及格。 三目运算符可以转换为ifelse语句来实现: if($score>=60){ $result1=“及格"; } else{ $result1=“不及格"; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 笔记 运算