运算符

算术运算符

基础:

符号有:+   -   *   /   %

说明:

  1. 他们都是针对数字进行的运算;
  2. 如果他们的两边有不是数字的数据,就会(自动)转换为数字;
  3. 其中取余运算(取模运算)%,它只针对“整数”进行运算,如果不是,会自动截取为整数。
      1. 3 % 3 相当于 11 % 3;
    • 11.8 % 3. 8 相当于 11 % 3;

自增自减运算符:

  • 常规:对数字进行自加1或自减1。
  • 字符串: 只能自增,且自增的效果就是“下一个字符”,其只能针对字母或数字进行自加:
  • 布尔值递增递减无效
  • null递减无效,递增结果为1

字符串自增的例子:

前自增和后自增的区别(自减类似)

通常,我们在循环中,推荐使用前加加(效率稍高),比如:

for($i = 1; $i < 10000; ++$i){ ....... }

演示前加加后加加进行1千万次的“效率比较”:

比较运算符

  • 符号:>   >=   <   <=   ==   !=   =   !
  • 一般比较:是针对数字进行的大小比较
  • 和=比较:前者通常叫做模糊相等的比较,后者叫做精确相等的比较(只有数据的类型和数据的值/内容,都相等,才是全等的)。
  • 不要对浮点数直接进行大小比较

必须能够找到手册的“类型比较表”:附录》php类型比较表:

常见不同类型(标量类型)数据之间的比较规律:

  • 如果比较的数据中,有布尔值,转为布尔值比较,布尔值比较只有一个规则:true>false
  • 否则,如果有数字值,就转为数字值比较:这就是常规比较。
  • 否则,如果两边都是“纯数字字符串”,转为数字比较
  • 否则,就按字符串比较。字符串比较的规则是:
    • 对两边的字符串,一个一个从前往后取出字符并进行比较,谁“先大”,结果就是它大。
“abc” > true  //? false
“abc” > false //true
“0” > false //false
3 > “12”; //false
3 > “12abc”; //false
“3” > “12” //false
“abc” > “c”; //false,后者大
“abc” > “ab123cde”; //true 因为这里”c”大于”1”
“3abc” > “12abc”; //true, 因为”3”大于“1”
1 > “a”; //? true
“1” > “a” //? false

逻辑运算符

  • 逻辑运算符都是针对“布尔值”进行的运算。
  • 如果不是布尔值,就会转换为布尔值进行;
  • 布尔值只有2个:true,false

基本运算规则(真值表):

  • 逻辑与规则:

    • true && true ==>> true
    • true && false ==>>false
    • false && true ==>>false
    • false && false ==>>false
    • 总结:只有2个都是true,结果才是true

      只要有一个是false,结果就是false
  • 逻辑或规则:

    • true || true ==>> true
    • true || false ==>>true
    • false || true ==>>true
    • false || false ==>>false
    • 总结:只有2个都是false,结果才是false

      只要有一个是true,结果就是true
  • 逻辑非规则:

    • !true ==>> false
    • !false ==>> true

辑运算符的“短路现象”:

  • 逻辑与短路:

结果:如果一个语句中,通过与运算需要进行多项判断,而且不同的判断具有明显不同的“复杂程度”,则我们应该将简单的判断放在前面,这时候我们就可以利用短路现象以达到提高效率的目的。

  • 逻辑或短路:

结果:如果一个语句中,通过或运算需要进行多项判断,而且不同的判断具有明显不同的“复杂程度”,则我们应该将简单的判断放在前面,这时候我们就可以利用短路现象以达到提高效率的目的。

字符串运算符

  1. 符号只有一个: .  也衍生出另一个: .=
  2. 含义:就是将这个符号两边的字符串连接起来;
  3. 如果两边不是字符串,就会自动转换为字符串,然后连接起来。
“ab”  .   3                  ==>> “ab3”;
“12” . 3 ==>>”123”
12 . 3 ==>> “123”

赋值运算符:

  • 一个基本赋值运算符: =

    • 形式: $变量名 = 值;
    • 理解: 将右边的值(不管做了多少运算),赋值给左边的变量。
  • 若干个衍生的赋值运算符:
    • += 加等: 形式: $变量名 += 值;

      • 理解: 相当于: $变量名 = $变量名 + 值;
    • -= 加等: 形式: $变量名 -= 值;
      • 理解: 相当于: $变量名 = $变量名 - 值;
    • *=  /=  %=  .=  其都可以认为是上述形式的一种简化版。

条件(三目,三元)运算符

  • 只有一个,形式如下:

    • 数据值1 ? 数据值2 : 数据值3
  • 含义:

    • 对数据值1进行判断,如果为“真”,则该运算符的运算结果就是数据值2,否则就是数据值3;
  • 它是这样一个流程控制(逻辑判断)语句的简写形式:

if( 数据值1 ){
$变量名 = 数据值2;

else{
$变量名 = 数据值3;

注意:如果数据值1不是布尔值,也会转换为布尔值;

$score = 66;                    //分数
$valuation = $score >= 60 ? “及格” : “不及格”; //结果为“及格” $score = 56; //分数
$valuation = $score >= 60 ? “及格” : “不及格”; //结果为“不及格” $score = 56; //分数
$valuation = $score ? “及格” : “不及格”; //结果为“及格”,这里可能就偏离的本意!!

位运算符

基础规定

  1. 位是什么?就是2进制数字的每一个“位”,一个整数数字,有(由)32个位构成!
  2. 位运算符是仅仅针对整数进行的运算符;
  3. 位运算符有如下几个
    • &: 按位与;
    • |: 按位或;
    • ~: 按位非;按位取反;
    • ^: 按位异或;
  4. 位运算符的基本语法规则:
  • 按位与基本规则:

    • 1 & 1 ==>> 1
    • 1 & 0 ==>> 0
    • 0 & 1 ==>> 0
    • 0 & 0 ==>> 0
  • 按位或基本规则:

    • 1 | 1 ==>> 1
    • 1 | 0 ==>> 1
    • 0 | 1 ==>> 1
    • 0 | 0 ==>> 0
  • 按位非基本规则:

    • ~1 ==>> 0
    • ~0 ==>> 1
  • 按位异或基本规则:

    • 1 ^ 1 ==>> 0
    • 1 ^ 0 ==>> 1
    • 0 ^ 1 ==>> 1
    • 0 ^ 0 ==>> 0
      • 可见,按位异或的规则是:相同为0,不同为1

整数的按位与运算(&)

  • 形式:

    • $n1 & $n2; //n1,n2是2个任意整数;
  • 含义:
    • 将该2个整数的二进制数字形式(注意,都是32位)的每一个对应位上的数字进行基本按位与运算之后的结果!
  • 注意:他们运算的结果,其实仍然是一个普通的数字(10进制)。

示例图示(只用8个位来演示):

$r1 = 10 & 20;

10的2进制

0

0

0

0

1

0

1

0

20的2进制

0

0

0

1

0

1

0

0

&运算结果:

0

0

0

0

0

0

0

0

代码验证:

整数的按位或运算:

  • 形式:

    • $n1 | $n2; //n1,n2是2个任意整数;
  • 含义:
    • 将该2个整数的二进制数字形式(注意,都是32位)的每一个对应位上的数字进行基本按位或运算之后的结果!
  • 注意:他们运算的结果,其实仍然是一个普通的数字(10进制)。

示例图示(只用8个位来演示):

$r1 = 10 | 20;

10的2进制

0

0

0

0

1

0

1

0

20的2进制

0

0

0

1

0

1

0

0

|运算结果:

0

0

0

1

1

1

1

0

则结果该数据值大小为: 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 0 = 16 + 8 + 4 + 2 = 30

代码验证:

整数的按位左移运算

  • 形式:

    • $n1 << $m
  • 含义:
    • 将十进制数字n1的二进制数字形式(也是32位的)的每一个位上的数字都一次性往左边移动m位,

      并将右边空出来的位置补0,左边冒出去的不管,这样操作之后得到的结果。

示例图示(只用8个位来演示):

$r1 = 10 << 2;

10的2进制

0

0

0

0

1

0

1

0

左移2位后

0

0

1

0

1

0

0

0

则结果为:

25

0

23

0

0

0

可见,结果为:25 + 23 = 32 + 8 = 40

代码验证:

补充知识:原码,反码,补码

  • 原码:

    • 就是一个二进制数字,从“数学观念”上来表达出的形式。其中,我们规定:
    • 一个数字的最左边一位是“符号位”,0表示正数,1表示负数;

    比如:

  • 反码:

    • 正数的反码就是其本身(即不变);
    • 负数的反码是:符号位不变,其他位取反;

    比如:

  • 补码:

    • 正数的补码就是其本身(即不变);
    • 负数的补码是:符号位不变,其他位取反后+1——即反码+1

    比如:

一个小提示:计算机内部的运算,实际全都是使用补码进行的,而且运算的时候,符号位不再区分,直接也当做“数据”参与运算:

  • 示例1: 5+3<

  • 示例2: 5-3:

    • 实际上,cpu内部,会将“减法”运算,转换为“加法运算”,即:5 + (-3)

位运算符的应用:管理一组事物的开关状态

  • 什么是开关状态?

    • 现实中,有很多数据都是只有2种结果(值)的,对应的其实就是我们的布尔类型的值。
    • 这里,所谓管理一组事物的开关状态,应该理解为其实就是管理若干个只有2个状态的“数据符号”。
    • 比如:有5个灯泡,对应5个状态数据。
    • 这5个灯泡,就有 25 种状态呢?
  • 这里的管理目标是:使用一个变量,就可以表达若干个数据的“当前状态”。具体有3个任务:

    1. 通过该变量,可以获知任何一个数据(灯泡)的当前状态。
    2. 通过该变量,可以将一个一个数据的状态“关闭”;
    3. 通过该变量,可以将一个一个数据的状态“开启”;

数组运算符

有这些:

  • +: 数组联合,也可以理解为“数组串联”。

将右边的数组项合并到左边数组的后面,得到一个新数组。如有重复键,则结果以左边的为准

$arr1 = array(5=>10,  8=>20,  10=>30);
$arr2 = array(3=>33, 2=>22);
$r1 = $arr1 + $arr2; //结果为:array(5=>10, 8=>20, 10=>30, 3=>33, 2=>22)
另一个有重复键的例子:
$arr1 = array(5=>10, 8=>20, 10=>30);
$arr2 = array(8=>33, 2=>22);
$r1 = $arr1 + $arr2; //结果为:array(5=>10, 8=>20, 10=>30, 2=>22)
  • ==

如果两个数组具有相同的键名和键值(可以顺序不同,或类型不同),则返回true

$arr1 = array(3=>33,  2=>22);
$arr2 = array(2=>”22”, 3=>”33” );
此时,$arr1,和 $arr2是相等的( = = )
  • !=
  • ===: 如果两个数组具有相同的键名和键值且顺序和类型都一样,则返回true
  • != =

错误控制运算符@:

通常就用在一个地方:

$link  =  @mysql_connect(“数据库服务器地址”, “用户名”,  “密码”);

作用是:

如果该连接数据的语句失败(比如连接不上),则屏蔽该失败的错误提示!

运算符的优先级

运算符,都有优先级问题!

记住以下几条就可以了:

  • 要意识到运算符有优先级问题
  • 括号最优先,赋值最落后(通常)
  • 先乘除后加减
  • 大致:单目运算符〉算术运算符〉比较运算符〉逻辑运算符(除了“非”运算)

能查到手册: 语言参考》运算符》运算符的优先级。

流程控制

流程图基本符号:

只是人们习惯上使用的一些图形符号,以代表一定的含义,帮组别人理解流程过程。

流程走向:

开始结束:

语句(块):

判断:

输入输出:

if分支结构

基本语法形式如下:

if (条件判断1){
分支1;
}
else if (条件判断2){
分支2;
}
else if (条件判断3){
分支3;
}
......
else {
//else分支
}

switch分支结构

形式:

switch ( 表达式 ){
case 条件值1:
分支1;
【break;】 //是可以省略部分,不是语法所必须;
case 条件值2:
分支2;
【break;】 //是可以省略部分,不是语法所必须;
........
default :
default 分支;
}

举例如下:

for循环结构



php : 基础(3)的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  10. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

随机推荐

  1. 从 IClassFactory 为 CLSID 为 {00024500-0000-0000-C000-000000000046} 的 COM 组件创建实例失败,原因是出现以下错误: 8001010a解决办法

    1.在命令行中输入:dcomcnfg,会显示出“组件服务”管理器 2.打开“组件服务->计算机->我的电脑->DCOM 配置”,找到“Microsoft Word文档”,单击右键,选 ...

  2. window虚拟机安装Linux

    Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核.Linux可安装在各种计算机硬件设备中,比如手机.平板电脑.路由器.视频游戏控制台.台 ...

  3. 记一次MVC4站点在IIS上部署的诡异问题

    最近朋友的公司遇到一个站点部署问题, 朋友从事服务器维护多年,说也是花了十多天仍为解决. 经多次尝试未果,仍报错如下: 我询问了相关情况,确认了该网站是VS2013开发的,版本为,NET Framew ...

  4. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. httpclient4 文档翻译

    前言超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了.Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web浏览器范畴,同时,也增加了需要 ...

  6. c# 如何隐藏TabControl控件的标签

    http://www.cnblogs.com/chenleiustc/archive/2009/11/25/1527813.html 方法一:将标签缩小到机会看不到:设置页面的大小模式会自动适合(会尽 ...

  7. 【实践】js 如何实现动态添加文本节点

    对于我这个js 小白来说 今天鼓起勇气做起了邮箱认证这个特效 但是这次不是想说如何实现这这个特效而是想记录一下特效当中的某个部分 那就是向元素节点动态添加文本节点 百度了一下动态添加文本节点的方式 是 ...

  8. 原生态PHP+mysql 实现分页

    <?php/** * 数据分页 * 时间:2016-07-06 *//**1传入页码**/ $page = $_GET['p'];/**2根据页码取数据:php->mysql处理**/$h ...

  9. 初学Objective-C语言需要了解的星星点点

             其实大多数开发初学者都有一些相同的特点,可以说是一种“职业病”.Most有其他平台开发基础的初学者,看到Xcode就想摩拳擦掌:看到Interface Builder就想跃跃欲试:而 ...

  10. ECshop后台角色权限的添加和分配

    1.在权限文件中配置 2.在需要加权限的文件中加入权限. 例如:d:\ecshop\admin\user_account.php 3.在数据库表 ecs_admin_action中配置 4.会员权限 ...