相等与恒等
简单来说,相等不考虑数据类型,恒等考虑。另外,在数组中,变量名要一样,顺序要一致,这样才能相等。如果没有自定义变量名,那么默认变量名就是0,1,2,3…
<?php
$x = array("a" => "1", "b" => "2");
$y = array("a" => 1, "b" => 2);
$z = $x + $y; // $x 和 $y 数组合并
var_dump($z);
var_dump($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);
?>
运行结果:
array(2) {
["a"]=>
string(1) "1"
["b"]=>
string(1) "2"
}
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)
$_GET['user']
说明:通过 URL 参数传递给当前脚本的变量的数组
Example #1$_GET范例
<?php echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!'; ?>
假设用户访问的是 http://example.com/?name=Hannes
以上例程的输出类似于:
Hello Hannes!
在 PHP7+ 版本多了一个 NULL 合并运算符 ??,实例如下:
<?php
// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
?>
另:自 PHP 5.3 起,可以省略三元运算符中间那部分(原来:(expr1) ? (expr2) : (expr3) )。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
运算符优先级
运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样(从高到低:&&,||,and,or)。<?php
// 优先级: && > = > and
// 优先级: || > = > or
$a = 3;
$b = false;
$c = $a or $b;
var_dump($c); // 这里的 $c 为 int 值3,而不是 boolean 值 true
$d = $a || $b;
var_dump($d); //这里的 $d 就是 boolean 值 true
?>
运行结果:
int(3)
bool(true)
单双引号
简单来说:双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符如:
$foo = 2;
echo "foo is $foo"; // 打印结果: foo is 2
echo 'foo is $foo'; // 打印结果: foo is $foo
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行)
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n
$foo = 2;
echo "foo is $foo"; // 打印结果: foo is 2
echo 'foo is $foo'; // 打印结果: foo is $foo
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行)
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n
如上所示:在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\和插入单引号’)
这里有一个会经常遇到的问题:插入数据库的SQL语句是采用单引号来定义字符串的,如果要将一个含有单引号的字符串插入数据库,这个SQL语句就会出错。所以在SQL注入问题中要特别注意单双引号,转义符的使用。