运算符

WBOY
WBOYOriginal
2016-06-20 12:48:091181Durchsuche

运算符优先级

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

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

<?php var_dump(1 <= 1 == 1);  // truevar_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");  // truevar_dump("1" == "01");  // truevar_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 class="brush:php;toolbar:false">$outip
";echo "
$output
";

反引号运算符在激活了安全模式或者关闭了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的优先级高。

字符串运算符

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

数组运算符

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

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

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

  • 不等:$a != $b或$a $b。

  • 不全等:$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 trueboolean 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);  // truevar_dump($a instanceof NotMyClass);  // falsevar_dump($a instanceof MyParent);  // true$b = new InClass;var_dump($b instanceof MyInterface);  // true$c = 'InClass';var_dump($b instanceof $c);  // truevar_dump($c instanceof stdClass);  // false

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

    (全文完)

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn