• 运算符


    运算符优先级

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

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

    <?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不允许用来检测常量。

    (全文完)

  • 相关阅读:
    A 开场白 快速幂
    矩阵快速幂
    围棋棋盘有多少正方形 19*19
    matlab
    汉诺塔问题
    error C2504 base class undefined
    查看标准的FM以及描述等的一个数据…
    报表整合数据的时候,常见的模式:
    SQL执行顺序
    LIST&nbsp;BOX&nbsp;联动的实现
  • 原文地址:https://www.cnblogs.com/sintune/p/php-operators.html
Copyright © 2020-2023  润新知