很多时候我们需要将几个字符串连接起来显示,在PHP中,字符串之间使用 “点” 来连接,也就是英文中的半角句号 " . " 。" . " 是字符串连接符,可以把两个或两个以上的字符串链接成一个字符串。例如:
echo 'A' . 'B' . 'C'; // 输出ABC
echo 'A' . $str1 . $str2; //Aabc123
点连接符使用起来很简单,但实际项目中,经常还是看到有些同事犯错,看一个例子:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
class Student
{
public $name = '';
public $age = 0;
}
$class = new Student;
$class->name = 'zeng';
// 示例一
echo 'sex=' . isset($class->sex) ? $class->sex : 'A' . " B"; // Notice: Undefined property: Student::$sex in /demo/index.php on line 16
// 示例二
echo 'sex=' . (isset($class->sex) ? $class->sex : 'A') . " B"; // sex=A B
示例一 提示notice错误,示例二能正常输出。
示例一的执行可以解释为,表达式不为空,执行 $class->sex ,sex不是Student类属性
( 'sex=' . isset($class->sex) )? $class->sex : ('A' . " B")
示例二中因为三元运算符 加了括号,能得到想要的结果
(isset($class->sex) ? $class->sex : 'A')
举个简单的例子:
// 理解为:( 'RESULT: ' . 1 ) ? 'A' : ('B' . 'C')
echo 'RESULT: ' . 1 ? 'A' : 'B' . 'C'; // 输出 A
echo 'RESULT: ' . (1 ? 'A' : 'B') . 'C'; // 输出 RESULT: AC
注意:【字符串运算符】的优先级别 大于 【三元运算符】,实际操作中,如果记不住优先级顺序,建议习惯性给对应的表达式加括号