运算符优先级

每种编程语言都有运算符,运算符要学会灵活使用。

运算符拥有不同的优先级和结合方向。

<?php
var_dump(1 <= 1 == 1); // true
var_dump(true ? 0 : true ? 1 : 2); // 2
$a = 1;
var_dump(++$a + $a++); // may print 4 or 5

在需要的时候使用括号,可以增强代码的可读性。

算术运算符

取模运算符的结果和被除数的符号相同。

赋值运算符将原变量的值拷贝到新变量中,有个例外就是碰到对象时,是以引用赋值的,除非明确使用clone关键字来拷贝。

new运算符自动返回一个引用。

位运算符

位移有一下几个规律:

  • 向任何方向移出去的位都被丢弃。
  • 左移时以零填充,且正负号不被保留。
  • 右移时以符号位填充,意味着正负号保留。

这一节的重点就是把手册重点的几个示例程序看懂吧。示例中字符串的XOR运算比较难理解,这个以后再看。还有整数的位移,感觉理解就好吧。

比较运算符

普通等号==只需类型转换后两值相等就返回真。

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。

<?php
var_dump(0 == "a"); // true
var_dump("1" == "01"); // true
var_dump("10" == "1e1"); // true

自PHP 5.3起,可以省略三元运算符中间那部分。表达式expr1 ?: expr3在expr1真时返回expr1,否则返回expr3。三元运算符是从左往右计算的。

错误控制运算符

PHP支持一个错误控制运算符@,@运算符只对表达式有效。将其放在表达式前,该表达式可能产生的任何错误信息都被忽略掉。

不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。

执行运算符

PHP支持一个执行运算符:反引号,就是键盘左上角那个。效果与函数shell_exec()相同。

<?php
$output = `systeminfo`;
$outip = shell_exec('ipconfig');
echo "<pre>$outip</pre>";
echo "<pre>$output</pre>";

反引号运算符在激活了安全模式或者关闭了shell_exec()时是无效的。

注意!反引号不能在双引号字符串中使用。

递增递减运算符

递增/递减运算符不影响布尔值。

递减NULL值也没有效果,但是递增NULL的结果是1。

在处理字符变量的算术运算时,PHP沿袭了Perl的习惯,而非C的。例如,在Perl中$a = 'Z'; $a++;将把$a变成'AA'。

注意!字符变量只能递增,不能递减,并且只支持纯字母(a-z和A-Z)。递增/递减其他字符字符变量则无效,原字符串没有变化。

<?php
$z = 'z';
$Z = 'Z';
var_dump(++$z); // 'aa'
var_dump(++$Z); // 'AA'

逻辑运算符

||比or的优先级高。&&比and的优先级高。

字符串运算符

第一个是连接运算符.,第二个是连接赋值运算符.=。

数组运算符

  1. 联合:$a + $b。把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,有变动额被忽略。

  2. 相等:$a == $b。具有相同的键值对。

  3. 全等:$a === $b。具有相同的键值对,并且顺序和类型都相同。

  4. 不等:$a != $b或$a <> $b。

  5. 不全等:$a !== $b。

数组中的单元如果具有相同的键名和值则比较时相等,不要在意顺序和类型。

<?php
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");
var_dump($a);
var_dump($b);
var_dump($a == $b);
var_dump($a === $b);

输出结果如下所示。

array (size=2)
0 => string 'apple' (length=5)
1 => string 'banana' (length=6) array (size=2)
1 => string 'banana' (length=6)
0 => string 'apple' (length=5) boolean true boolean false

类型运算符

PHP中有一个类型运算符instanceof,用于确定一个PHP变量是否属于某一类的实例。

<?php
class MyParent {}
class MyClass extends MyParent {}
class NotMyClass {}
interface MyInterface {}
class InClass implements MyInterface {}
$a = new MyClass;
var_dump($a instanceof MyClass); // true
var_dump($a instanceof NotMyClass); // false
var_dump($a instanceof MyParent); // true
$b = new InClass;
var_dump($b instanceof MyInterface); // true
$c = 'InClass';
var_dump($b instanceof $c); // true
var_dump($c instanceof stdClass); // false

注意,instanceof不允许用来检测常量。

(全文完)

运算符 - PHP手册笔记的更多相关文章

  1. 初步C++运算符重载学习笔记&lt;3&gt; 增量递减运算符重载

    初步C++运算符重载学习笔记<1> 初探C++运算符重载学习笔记<2> 重载为友元函数     增量.减量运算符++(--)分别有两种形式:前自增++i(自减--i).后自增i ...

  2. 初探C++运算符重载学习笔记&lt;2&gt; 重载为友元函数

    初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 以下的两种情况发生.则我们须要将运算符重载为类的友元函数 <1>成员函数不能满足要求 ...

  3. [python学习手册-笔记]002.python核心数据类型

    python核心数据类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明 ...

  4. [python学习手册-笔记]003.数值类型

    003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  5. 类与对象 - PHP手册笔记

    基本概念 PHP对待对象的方式与引用和句柄相同,即每个变量都持有对象的引用,而不是整个对象的拷贝. 当创建新对象时,该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常.类应在被实例化 ...

  6. 函数 - PHP手册笔记

    用户自定义函数 函数无需在调用前被定义,除非是有条件定义的. PHP中的所有函数和类都具有全局作用域.PHP不支持函数重载,也不可能取消定义或者重定义已声明的函数. 特意试了下,我的电脑上的PHP递归 ...

  7. 类型 - PHP手册笔记

    类型简介 PHP 支持 8 种原始数据类型. 四种标量类型: boolean(布尔型,不区分大小写) integer(整型) float(浮点型,也称作double) string(字符串) 两种复合 ...

  8. [python学习手册-笔记]001.python前言

    001.python前言 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明 ...

  9. [python学习手册-笔记]004.动态类型

    004.动态类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

随机推荐

  1. yii2安装与初始化-Yii2学习笔记(一)

    一.安装项目: 使用composer下载安装yii2 advanced安装包: composer create-project yiisoft/yii2-app-advanced advanced(自 ...

  2. 清空DNS缓存

    昨天写了个Python的脚本,功能就是爬取一个网页上的Google ip地址再写入到本机的hosts里面去. 但是写完并且运行完成之后发现上不了Google.于是想到了是不是要清空一下DNS的缓存.不 ...

  3. Catch That Cow(BFS)

    Catch That Cow Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. OSA-MAC: A MAC Protocol for Opportunistic Spectrum Access in Cognitive Radio Networks

    This full text paper was peer reviewed at the direction of IEEE Communications Society subject matte ...

  5. ownCloud Virtual Machines(bitnami.com)

    ownCloud Virtual Machines(bitnami.com)https://bitnami.com/stack/owncloud/virtual-machine

  6. Linux系统编程(12)——shell基础

    Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个 ...

  7. C语言中不同类型的循环(Different types of loops in C)

    C语言中有三种类型的循环:for,while,do-while. while循环先判断循环条件. while (condition) { //gets executed after condition ...

  8. Linux 文件

    Linux系统中:.a文件是静态链接库文件.所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分.当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了 ...

  9. jQuery判断元素是否是隐藏的代码

    if($("#elem_id").is(":hidden")) { } 实例代码1: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC & ...

  10. Memcached安装,操作,用C#操作

    本文来自:http://li19910722.blog.163.com/blog/static/136856822201406103313163/ 1:安装 下载Memcache:http://cod ...