当前位置: 首页 > news >正文

数据类型、运算符

三、数据类型

 

标量类型: int, float, string, bool

 

复合类型: array, object

 

特殊类型: null, resource

 浮点类型:

floatdoublereal

 

注意:浮点数不应直接进行大小比较

可变函数:

 

可变函数,就是函数名“可变”——其实跟可变变量一样的道理。

1 function  jpg(){处理jpg图}
2 function  png(){处理png图}
3 function  gif(){处理gif图}
4 $fileName = get_fileName(){获取用户上传的图片名};
5 $houzhui = get_houzhui($fileName);
6 $houzhui();
举例

 

字符串类型string:

js中,虽然有2种字符串表达形式,但也应该理解为是一种字符串:

var  str1 = ‘单引号字符串’

var   str2 = “双引号字符串”;

但在php中,单引号和双引哈字符串,是有不同细节含义的字符串。

php中,有4种字符串形式:

单引号字符串:

$s1="php34.com";
$str1='ab\nc"d\'efg:$s1';
echo $str1

结果为

ab\nc"d\'efg:$s1
双引号字符串
$str2="ab\nc'd\",\101,\41,efg:$s1";

结果:ab c' d',A,A,egf:php34.com

布尔类型:bool, boolean

用于标识某种只有两个状态值的数据:true,false——吃没吃,去没去,有没有。。。。。

在应用出,我们常常会(需要)直接将一个数据(可能是各种其他类型)当作一个布尔值来进行判断。

那么此时其实发生的是:会将该数据隐含转换为布尔值。

最常见的语法形式就是:

if(  某数据/变量 ){

.................

}

那么,在php中,其他各种数据,隐含转换为布尔值的时候,会当作false的有:

0

0.0

null

“”

“0”

array();   //空数组

未定义的变量       //当然要尽量避免

其他数据就当作true来看待了。

数组类型array:

标识一系列数据的“有序排列”的集合体。

php中,数组的下标可以使用整数或字符串。

数字下标常说“索引号”,

字符串下标常说“键名”。

实际上,在php的报错系统中,都叫做“index”,或offset

数组中还可以存储数组,就可以构成“多维数组”的形式。

数组遍历在php中有专门语法:

foreach( 数组名   as   下标变量$k  =>  值变量$v1 ){

//这里就是循环体,就可以使用两个变量$k, $v1

}

对象类型object

在php中,对象跟js中的有比较大的区别。

通常,js中的对象,有自定定义的(创建的),也有“现成”,比如window,location,标签对象。

但:

php中的对象,通常都是指自己定义的对象,纯语法的。

空类型null

只是一个计算机中编程领域的“概念”类型,只是为了表达变量所存储的数据的某种特殊情形所创建的概念——没有存数据,或没有存有效的有意义的数据

类型转换:

自动转换:

通常自动转换是弱类语言的一个最基本也最方便的一个特征:它会在各种运算中根据运算符的需要也将非该运算符所能处理的数据转换为可以处理的数据。常见情形如下:

if(数据){}:转为bool类型

算术运算符:转为数字类型

连接运算符:转为字符串类型

比较运算符:转为布尔类型或数字类型

  两边如果有至少一个布尔,则另一边就会转为布尔,并进行比较

  否则,就转为数字进行比较

特别常用的一个转换(不管是自动转换还是强制转换),就是字符串转换为数字:

“5”         ==>>  5 //整数

“5.5”       ==>>      5.5浮点数

“5abc”     ==>>      5整数

“5.5ab”   ==>>      5.5浮点数

“abc5”     ==>>      0整数

“abc”      ==>>      0整数

if(数据){}:转为bool类型

“”           ==>>      0

强制转换

就是通过语法来让某数据转换为另一种类型的数据

注意:我们并不能使用该语法将任意类型的数据,转换为其他任意类型——因为有些类型之间的转换是没有意义的——系统内部也没有定义过该类型转换的规则。

——最常见的转换通常就发生在基本(标量)数据类型之间。

与类型相关的系统函数

var_dump():能够输出一个变量的完整信息。

getType():获取一个变量的类型名称,结果是一个单词(字符串), setType();设置一个变量的类型,语法: setType(变量名,目标类型)

isset(), empty(), unset();

isset()判断一个变量是否存在数据:empty()判断一个数据是否为空:接近我们的日常观念(没有就是空

)unset():销毁(删除)一个变量。

is_XX类型() 系列函数:判断某个数据是否是某种类型,包括:is_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)

 

isset(), empty(), unset();

if(数据){}:转为bool类型

算术运算符:转为数字类型

连接运算符:转为字符串类型

比较运算符:转为布尔类型或数字类型

两边如果有至少一个布尔,则另一边就会转为布尔,并进行比较

否则,就转为数字进行比较

 

 

四、运算符

 

有以下几个:+   -   *    /    %    ++    --

 

注意:注意取余运算%,先取整,再取余

 

 

自增自减运算符:

常规:对数字进行自加1或自减1。

字符串: 只能自增,且自增的效果就是“下一个字符”。

布尔值递增递减无效

null递减无效,递增结果为1

前加加和后加加的区别:

++:先完成变量的递增运算,再取得该变量的值参与别的运算。

++:先将原来变量的值临时存储,再将变量值递增,最后再将临时存储的值参与别的运算。

推论1:如果独立语句中进行自加运算,前自加后自加没有区别 。

推论2:如果前自加后自加是放在别的语句中,则会有所区别。

推论3: 前加加比后加加效率略高(在循环中建议使用前加加)。

1 $v1 = 7.5 % 3;        //结果是:1
2 $v2 = 7.5 % 3.5;    //结果是:1
3 对比js中:——js中, 不会进行取整处理
4 var  v1 = 7.5  %  3;    //结果是:1.5
5 var  v2 = 7.5  %  3.5;    //结果是:0.5
举例

比较运算符:

包括:>   >=    <    <=    ==松散相等    !=    ===严格相等     !==

 

=====的区别:

 

==:松散相等,比较的是两个数据“类型转换之后”是否有可能相等,也常常认为是“数据内容是否相同”

 

===:严格相等,全等,只有两个数据的类型和数据的内容都完全一致,才相等。

 

常见不同类型的比较(主要指标量类型的数据)——非正常比较

 

正常比较——数字的大小比较

 

如果有布尔值,均转为布尔值比较:规则: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最终应该是一个布尔值(如果不是,则会当作布尔值来使用)。

 

含义:

 

如果数据1true,则运算结果为数据2, 否则运算结果为数据3

 

 1 $score = 66;
 2 
 3 
 4 $result 1=  $score >= 60  ?  “及格”  : “不及格”; //结果是“及格”
 5 
 6 
 7  
 8 
 9 
10 $result 2=  $score  ?  “及格”  : “不及格”; //结果是“及格”,但含义完全不同,因为即使分数是33,也是及格。只有分数为0才是不及格。
典型举例

 

 

 

 

三目运算符可以转换为if else语句来实现:

 

if( $score >= 60{

 

$result1 = “及格";

 

}

 

else{

 

$result1 = “不及格";

 

}

 

转载于:https://www.cnblogs.com/sc1314-1218/p/8358001.html

相关文章:

  • QSizeGrip 小记
  • Oracle创建表空间,添加用户及授权
  • sqlserver字符串拆分(split)方法汇总
  • Pycharm配置autopep8让Python代码更符合pep8规范
  • Union和Union All到底有什么区别
  • SQL——多行并成一行显示, 以字符串分隔(相当于C#中的join)
  • angular1.5 与 angular5 组件的对比
  • maven搭建ssm框架是使用最新mysql 6.0jar遇到的问题
  • 新旧数据ICD的整合
  • linux-ftp install
  • 总结2011,展望2012
  • [ZJOI 2014]力
  • 不辜负每一个日出——Leo2012寄语
  • 微信小程序笔记
  • 索引以及索引缓冲区
  • axios 和 cookie 的那些事
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • ES6 ...操作符
  • leetcode-27. Remove Element
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Node 版本管理
  • Sass Day-01
  • Spark RDD学习: aggregate函数
  • Terraform入门 - 1. 安装Terraform
  • zookeeper系列(七)实战分布式命名服务
  • 基于axios的vue插件,让http请求更简单
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信开源mars源码分析1—上层samples分析
  • 进程与线程(三)——进程/线程间通信
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​ssh免密码登录设置及问题总结
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #Linux(权限管理)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (三分钟)速览传统边缘检测算子
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)Mysql的优化设置
  • (转)nsfocus-绿盟科技笔试题目
  • (转)socket Aio demo
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • ***监测系统的构建(chkrootkit )
  • .bat批处理出现中文乱码的情况
  • .gitignore文件_Git:.gitignore
  • .Net6 Api Swagger配置
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .so文件(linux系统)
  • :O)修改linux硬件时间
  • @Autowired 与@Resource的区别
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @Transactional 竟也能解决分布式事务?
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [Android]一个简单使用Handler做Timer的例子
  • [C/C++] -- 二叉树
  • [CISCN2019 华北赛区 Day1 Web2]ikun