php语法-数据类型,运算符,流程控制

数据类型

整体划分

  • 标量类型: int, float, string, bool
  • 复合类型: array, object
  • 特殊类型: null, resouce

整数类型int, integer

3种整数表示法

  • 十进制写法:123:

$n1 = 123;

  • 八进制写法: 0123

$n2 = 0123;

  • 十六进制写法: 0x123

$n3 = 0x123;

浮点类型float, double, real

有两种写法:

$v1 = 1.234;     //带小数点,,就是浮点类型

$v2 = 1.234E3;//含义是:1.234乘以10的3次方,即1234,带E的形式就是浮点数

$v3 = 1234E3;//结果值是1234000,但也是一个浮点数。

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

因为浮点数在系统内部(cpu级别),很可能都是不精确表达。

要想进行比较,我们只能考虑自己应用中的精度要求的基础上,将其转换为整数进行比较。

通常的做法是:乘以10的精度位数数次方,比如精度要求3位有效数字,则乘以103次方

  • 当整数运算的结果超出整数的范围后,会自动转换为浮点数。

整数的范围,在32位系统下,大约正负20多亿

字符串类型string

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

var  str1 = ‘单引号字符串’

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

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

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

单引号字符串:

结果:

双引号字符串:

结果:

更多的转义符见手册如下:

\

nowdoc(单引号)定界符字符串:

.0

输出结果为:

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类型
  • 算术运算符:转为数字类型
  • 连接运算符:转为字符串类型
  • 比较运算符:转为布尔类型或数字类型
    • 两边如果有至少一个布尔,则另一边就会转为布尔,并进行比较
    • 否则,就转为数字进行比较

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

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

“5.5”         ==>>         5.5浮点数

“5abc”      ==>>         5整数

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

“abc5”      ==>>         0整数

“abc”        ==>>         0整数

“”               ==>>         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)

 

运算符

算术运算符

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

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

$v1 = 7.5 % 3;           //结果是:1

$v2 = 7.5 % 3.5;        //结果是:1

对比js中:——js中, 不会进行取整处理

var  v1 = 7.5 
%  3;  //结果是:1.5

var  v2 = 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;

$result 1= 
$score >= 60  ?  “及格”  : “不及格”;       //结果是“及格”

$result 2= 
$score  ?  “及格”  : “不及格”;         //结果是“及格”,但含义完全不同,因为即使分数是33,也是及格。只有分数为0才是不及格。

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

if( $score >= 60){

$result1 = “及格";

}

else{

$result1 = “不及格";

}

流程控制

流程图基本符号:

开始结束:

 
   

语句(块):

       
   
     
 

判断                   :

       
   
     
 

输入输出:

走向

分支结构

if语句:

if(条件判断){

//语句块

} 

if else 语句:

if(条件判断){

//分支1

}

else{

//分支2;

}

if 
else if语句

if -else if -else语句:

switch语句:

switch(一个数据$v1){        //判断此v1变量跟下面的某个是否相等,如果相等,则进入对应进程。

case  状态值1:

//进程1

[break;]

case  状态值2:

//进程2

[break;]

case  状态值3:

//进程3;

[break;]

。。。。。。

[default :

//默认进程。

]

}

应用冲,break通常都会用上;只有一些特殊数据或需求的时候,可能不用。

如果没有使用break,则一旦某个状态满足,就会继续执行后续状态中的进程代码,而不再判断。

循环结构:

while循环:

$v1 = 10;  //初始化循环变量

while( $v1〉4 ){   //判断循环变量的条件

//语句快

echo  “abc”;

$v1--;

}

循环3要素:

1,循环变量初始化

2,循环变量判断

3,循环变量改变

此3 要素通常适用于所有循环过程。

do while循环

do{

//循环体

}while(条件判断);

含义:

先执行一次循环体,然后判断条件,如果条件满足,则继续回去执行循环体,然后再判断,依次类推。

for循环:

循环的中断

这里指的中断,适用于所有循环。

循环的中断有两种情况:

break中断:  终止整个循环语句,而跳出循环进入到循环结构之后的语句

continue中断:终止当前正在执行的循环体中的语句,而进入到循环的下一次过程里(改变,判断)

中断语句的语法如下:

break  $n;                //$n是一个大于等于1的整数,表示要中断的循环层数;

continew $n;

所谓循环层数,是指一个循环中又嵌套了循环的情况。

以当前循环为“起点”,表示第一层,往上(外)数,就是2,3,4层。。。。

部分流程控制的替换语法:

if ( ... ) :

//语句块

endif;

if ( ... ) :

//语句块

else:

//语句块

endif;

if ( ... ):

//语句块

elseif( ... ) :

//语句块

elseif( ... ):

//语句块

else:

//语句块

endif;

switch( ... ) :

case ...

case ...

endSwitch;

while(...):

//语句块

endwhile;

for(...; ...; ...):

//语句块

endfor;

foreach( ):

//语句块

endForeach;

控制脚本执行进度

die(“输出内容”)

含义:终止php脚本的运行(后续代码不再执行),并输出其中的内容

也可以:die();         die;

exit是die的同义词。

die是一种“语言结构”,并非函数,可以不写括号。

echo也是一种语言结构,而非函数:

echo (“abc”);

echo 
“abc”;

echo 
“abc”, “def”, 123;

sleep($n);

含义:让php脚本停止$n秒,然后继续执行。

数组基础

数组基础

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

php中,数组的元素顺序不是由下标决定,而是由其“加入”的顺序决定。

定义:

$arr1 = array(元素1,元素2,。。。。。 );

array(1,  5, 
1.1,  “abc”,  true, 
false);  //可以存储任何数据,此时为“默认下标”,

array(2=>1,  5=>5, 
3=>1.1,  7=>“abc”,  0=>true);//下标可以任意设定(无需顺序,无需连续)

array(2=>1,  5, 
1=>1.1,  “abc”,  0=>true)//可以加下标,也可以不加(默认下标),下标分别是:2,3,1,4,0

//默认下标规则:前面已经用过的最大数字下标+1

array(2=>1,  ‘dd’=>5, 
1=>1.1,  “abc”,  0=>true)//混合下标,同样遵循默认下标规则

array(-2=>1,  ‘dd’=>5, 
1.1,  “abc”,  true);      //负数下标不算在整数下标中,而只当作字符下标

//则最好3项的下标是:0, 1, 2

array(2.7=>1,  ‘dd’=>5, 
1=>1.1,  “abc”,  0=>true);//浮点数下标为自动转换为整数,且直接抹掉小数

array(“2.7”
=>1,  ‘dd’=>5,  “11”=>1.1, 
“abc”,  true)//纯数字字符串下标,当作数字看待,

//则此时下标为:2, ‘dd’, 11, 12, 13

array(2=>1,  ‘dd’=>5, 
true=>1.1,  “abc”,  false=>true)//布尔值当下标,则true为1,false为0;

array(2=>1,  ‘dd’=>5, 
2=>1.1,  “abc”,  true)//如果下标跟前面的重复,则单纯覆盖前面同名下标的值

//此时相当于为:array(2=>1.1,  ‘dd’=>5,  “abc”, 
true)

其他形式;

$arr1[] = 1;

$arr1[] = 5;

$arr1[] = 1.1;   //直接在变量后面使用[],就成为数组,并依次赋值。

。。。。

$arr2[‘aa’] = 1;

$arr2[‘bbbcc’] = 5;

$arrr2[5] = 1.1;

。。。。。。。。

这种形式写的下标,其实跟使用array语法结构几乎一样。

取值:通过下标。

赋值(同定义):

数组的分类

从键值关系:

关联数组:通常是指下标为字符串,并且该字符串大体可以表达出数据的含义的数组。

例:$person =
array(

“name” => “小花”,

“age”=>18,

“edu” => “大学毕业” ,

);

索引数组:

通常是指一个数组的下标是严格的从0开始的连续的数字下标——跟js数组一样。

从数组层次来分:

一维数组:

就是一个数组中的每一个元素值,都是一个普通值(非数组值)

$arr1 = array(

“name” => “小花”,

“age”=>18,

“edu” => “大学毕业”

);

二维数组:

一个数组中的每一项,又是一个一维数组。

$arr1 = array(

“name” => array(‘小花’,     ‘小芳’,   ‘小明’, );

“age”=>            array(18,      22,      
19),

“edu” => array(“大学毕业”,  ‘中学’,    ‘小学’)

);

多维数组:

依此类推。。。

多维数组的一般语法形式:

$v1 = 数组名[下标][下标][.....]

数组遍历

遍历基本语法

foreach( $arr   as   [
$key  => ] $value )   //$key可以称为键变量,$value可以称为值变量。

{

//这里就可以对$key  和 $value 进行所有可能的操作——因为他们就是一个变量

//$key 代表每次取得元素的下标,可能是数字,也可以能是字符串

//$value 代表每次取得元素的值,可能是各种类型。

//此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。

}

交换原理:

foreach 遍历细节探讨

  • foreach也是正常的循环语法结构,可以有break和continue等操作。
  • 遍历过程中值变量默认的传值方式是值传递。
  • 遍历过程中值变量可以人为设定为引用传递:
    • foreach($arr as $key =>
      &$value){ ... }
    • 键变量不可以设定为引用传递
  • foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作(就是指前面的指针函数),则会复制数组后在复制的数组上继续遍历循环。

foreach中如果值变量是引用传递,则无论如何都是在原数组上

原文地址:https://www.cnblogs.com/sword082419/p/9011757.html

时间: 2024-10-31 14:19:41

php语法-数据类型,运算符,流程控制的相关文章

js最基础知识回顾3(字符串拼接,数据类型,变量类型,变量作用域和闭包,运算符,流程控制,)

一.javaScript组成     1.ECMAScript:解释器.翻译 ---------------------------------------------------------几乎没有兼容性问题     2.DOM:Document Object Model --------操作HTML的能力----document--------有一些兼容性问题     3.BOM:Browser Object Model -------------浏览器---------------wind

core java 1~4(HelloWorld &amp; 标识符|关键字|数据类型 &amp; 表达式|流程控制 &amp; 数组)

MODULE 1 Java的编译和运行----------------------------编译:javac -d bin src\HelloWorld.java -d:指定编译后的class 文件的存放路径 若在此 .java文件的类中,调用了另一个文件的类,则需先编译被调用的类,然后输入 javac -d bin -cp bin src\HelloWorld.java 或者编译所有 .java文件 javac -d bin src\*.java 运行:java -cp bin com.br

数据类型&amp;分支流程控制(2)

1.数据类型 1.数据类型 局部变量:书写在方法中的变量: 全局变量:书写在类中,与方法平级的变量: -如果没有给变量赋初值 -全局变量会默认拥有一个初始值 -局部变量将没有初始值,这个时候不能使用这个局部变量(局部变量在使用之前必须赋值) -作用域:这个变量能够生效的范围 -局部变量:从声明开始,到声明所在的大括号结束: -全局变量:当前类中: -对于浮点型的数据,默认是double类型的. -如果想写一个float类型的数据,需要在小数后面加一个f: -如果想写一个double类型的数据,在

day2 数据类型,流程控制,循环

数据类型: 日常生活中,我们常用的数据是有很多类型的,比如数字和字符串,数字的功能是计数和运算,字符串即文字是记录和交换信息,区别很大. 但是计算机使用二进制记录所有信息,无法区分不同数据的区别,所以需要人为的指定. 比如c 和 java等语言,赋值变量时必须明确标识数据类型.但是python是更加高级的语言,解释器会自动识别数据类型,但是有时解释器指定的数据类型不符合你的要求,可以自己进行转换. 基本数据类型分为三类: 数字,字符串,布尔 数字: python 2.x 版本 分为三类:int整

04-5 python语法入门之流程控制

[TOC] #一 引子: 流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(之前我们写的代码都是顺序结构).分支结构(用到if判断).循环结构(用到while与for) 插图:恶搞图20 #二 分支结构 2.1 什么是分支结构 分支结构就是根据条件判断的真假去执行不同分支对应的子代码 2.2 为什么要用分支结构 人类某些时候需要根据条件来决定做什么事情,比如:如果今天下雨,就带伞 所以程序中必须有相应的机制来控制计算机具备人的这种判断能力 2.3 如何使用分支

python基础1 介绍、数据类型、流程控制

一.Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第4,成为除c\c++\java之外的全球第4大最流行的编程语言! Python是什么样的语言? 按照编译型.解释型列举出最常用的几种语言的分类 编译型.解释型各自优缺点: 编译型 优点:编译器一般会有预编译的过程对代码进行优化.因

DAY01 - 变量、数据类型、流程控制

执行方式: 1. 交互的方式: 优点:即时调试程序,调试方便 缺点:无法永久保存代码 2. 文件的方式: 优点:永久保存代码 缺点:不能即时调试代码 执行步骤: 1. 先启动Python解释器2. Python解释器把文件内容从硬盘读入内存3. 读入内存后,再解释执行 变量 变量:变化的量 定义一个变量有三个特征: id: id(x) type: type(x) value: x 注意:Python中的变量名没有储存值的功能,变量名与变量值只是一种绑定关系. 为变量x赋值,Python解释器开辟

python基本数据类型及流程控制应用

#2017-05-05 22:10:10一.用户登录及失败锁定账户 ============================================1.文件读写2.列表split方法3.while循环 ============================================ ###############################datafile文件内容#larry|123123|1#linzj|123123|0###########################

运算符 流程控制

一.运算符 1,算术 + - * /      % -- 取余 ++ --      +=  -= 加法:+        一般用于数字之间的运算    另外:用于字符串的拼接             任何类型的数据和字符串相加,结果都是字符串 除法:       注意结果的类型       java.lang.ArithmeticException: / by zero ++ -- :         复合运算符的位置 如果没有其他运算符参与,        在前和在后,效果一样 2,比较运算

4 运算符 流程控制

1.格式化输出 现有一练习需求,问用户的姓名.年龄.工作.爱好 ,然后打印成以下格式 name = input("Name:") age = input("age:") job = input("job:") hometown = input("hometown:") print("-----info of", name , "-----") print("Name:"