PHP入门学习笔记之—— PHP 运算符

PHP 运算符

A、表达式:PHP 支持四种标量值(标量值不能拆分为更小的单元,例如和数组不同)类型:整型值(integer),浮点数值(float),字符串值(string)
                     和布尔值(boolean)。
     PHP 也支持两种复合类型:数组和对象。这两种类型具可以赋值给变量或者从函数返回。
     表达式:“$b = ($a = 5)”和这样写“$a =5; $b=5”(分号标志着语句的结束)是一样的,因为赋值操作的顺序是由右到左的,
          也可以这么写“$b = $a =5”。
前递增和后递增均增加了变量的值,并且对于变量的影响是相同的。
不同的是递增表达式的值:前递增,写做“++$variable”,求增加后的值(PHP 在读取变量的值之前,增加变量的值,因而称之为“前递增”),
后递增,写做“$variable++”,求变量未递增之前的原始值(PHP 在读取变量的值之后,增加变量的值,因而叫做“后递增”)。
-------------------
递增/递减运算符 : Note: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。
++$a 前加 $a 的值加一,然后返回 $a
$a++ 后加 返回 $a,然后将 $a 的值加一 
--$a 前减 $a 的值减一, 然后返回 $a
$a-- 后减 返回 $a,然后将 $a 的值减一
eg.:<?php
    echo "<h3>Postincrement</h3>";
    $a = 5;
    echo "Should be 5: " . $a++ . "<br /> ";
    echo "Should be 6: " . $a . "<br /> ";

    echo "<h3>Preincrement</h3>";
    $a = 5;
    echo "Should be 6: " . ++$a . "<br /> ";
    echo "Should be 6: " . $a . "<br /> ";

    echo "<h3>Postdecrement</h3>";
    $a = 5;
    echo "Should be 5: " . $a-- . "<br /> ";
    echo "Should be 4: " . $a . "<br /> ";

    echo "<h3>Predecrement</h3>";
    $a = 5;
    echo "Should be 4: " . --$a . "<br /> ";
    echo "Should be 4: " . $a . "<br /> ";
?>

eg:为 $a 的当前值加 3,$a = $a + 3”可以这样写:“$a += 3”。
这里的意思是“取变量 $a 的值,加 3,得到的结果再次分配给变量 $a”。
除了更简略和清楚外,也可以更快的运行。

三元条件运算符: $first ? $second : $third
如果第一个子表达式的值是 TRUE(非零),那么计算第二个子表达式的值,其值即为整个表达式的值,
否则,将是第三个子表达式的值。
---------------------------------------------------------------------------------------------------------------------------------
B、运算符:
1、算术运算符: +、-、*、/、%;除法运算符总是返回浮点数。
                      只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
                      取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
2、赋值运算符:基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。
                       赋值运算表达式的值也就是所赋的值。
3、位运算符:
4、比较运算符:==、===、!=、<>、!==、<、>、<=、>=
            如果比较一个整数和字符串,则字符串会被转换为整数。
            如果比较两个数字字符串,则作为整数比较。
            此规则也适用于 switch 语句。
            <?php
            var_dump(0 == "a"); // 0 == 0 -> true
            var_dump("1" == "01"); // 1 == 1 -> true
            var_dump("1" == "1e0"); // 1 == 1 -> true
            switch ("a") {
            case 0:
                echo "0";
                break;
            case "a": // never reached because "a" is already matched with 0
                echo "a";
                break;
            }
            ?>
比较多种类型
运算数 1 类型 运算数 1 类型 结果
null 或 string string 将 NULL 转换为 "",进行数字或词汇比较
bool 或 null 任何其它类型 转换为 boolFALSE < TRUE
object object 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明
stringresource或 number stringresource或 number 将字符串和资源转换成数字,按普通数学比较
array array 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例)
array 任何其它类型 array 总是更大
object 任何其它类型 object 总是更大
     

eg. #1 标准数组比较代码

<?php
// 数组是用标准比较运算符这样比较的
function standard_array_compare($op1$op2
)
{
    if (
count($op1) < count($op2
)) {
        return -
1
// $op1 < $op2
    
} elseif (count($op1) > count($op2
)) {
        return 
1
// $op1 > $op2
    
}
    foreach (
$op1 as $key => $val
) {
        if (!
array_key_exists($key$op2
)) {
            return 
null
// uncomparable
        
} elseif ($val $op2[$key
]) {
            return -
1
;
        } elseif (
$val $op2[$key
]) {
            return 
1
;
        }
    }
    return 
0
// $op1 == $op2
}
?>
------------------------------------------------------------

另一个条件运算符是“?:”(或三元)运算符 。

eg. #2 赋默认值

<?php
 
// Example usage for: Ternary Operator
 
$action = (empty($_POST['action'])) ? 'default' $_POST['action'
];

 
// The above is identical to this if/else statement
 
if (empty($_POST['action'
])) {
     
$action 'default'
;
 } else {
     
$action $_POST['action'
];
 }

 
?> 
表达式 (expr1) ? (expr2) : (expr3) 在 expr1 求值为 TRUE 时的值为 expr2,在 expr1求值为 FALSE 时的值为 expr3
 
Note: 注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。
-------------------------------------------------------------------------------------------------------------------------------------
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

     5、逻辑运算符
逻辑运算符
例子 名称 结果
$a and $b And(逻辑与) TRUE,如果 $a 与 $b 都为 TRUE
$a or $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE
$a xor $b Xor(逻辑异或) TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。
! $a Not(逻辑非) TRUE,如果 $a 不为 TRUE
$a && $b And(逻辑与) TRUE,如果 $a 与 $b 都为 TRUE
$a || $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE
“与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同
 "||" 的优先级比 "or" 高
 "&&" 的优先级比 "and" 高

     6、字符串运算符:有两个字符串运算符。
                                第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。
                                第二个是连接赋值运算符(“.=”),它将右边      参数附加到左边的参数后。
<?php
$a "Hello ";
$b $a "World!"// now $b contains "Hello World!"

$a "Hello ";
$a .= "World!";     // now $a contains "Hello World!"
?>


     7、数组运算符
数组运算符
例子 名称 结果
$a + $b 联合 $a 和 $b 的联合。
$a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE
$a === $b 全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为TRUE
$a != $b 不等 如果 $a 不等于 $b 则为 TRUE
$a <> $b 不等 如果 $a 不等于 $b 则为 TRUE
$a !== $b 不全等 如果 $a 不全等于 $b 则为 TRUE

+ 运算符把右边的数组元素(除去键值与左边的数组元素相同的那些元素)附加到左边的数组后面,但是重复的键值不会被覆盖。

<?php
$a 
= array("a" => "apple""b" => "banana"
);
$b = array("a" => "pear""b" => "strawberry""c" => "cherry"
);

$c $a $b
// Union of $a and $b
echo "Union of $a and $b:  "
;
var_dump($c
);

$c $b $a
// Union of $b and $a
echo "Union of $b and $a:  "
;
var_dump($c
);
?> 
执行后,此脚本会显示:

Union of $a and $b:
array(3) {
  ["a"]=>
  string(5) "apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(6) "cherry"
}
Union of $b and $a:
array(3) {
  ["a"]=>
  string(4) "pear"
  ["b"]=>
  string(10) "strawberry"
  ["c"]=>
  string(6) "cherry"
}

数组中的单元如果具有相同的键名和值则比较时相等。

eg. #1 比较数组

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

var_dump($a == $b); 
// bool(true)
var_dump($a === $b); // bool(false)
?>

你可能感兴趣的:(PHP入门学习笔记之—— PHP 运算符)