字符串运算符 #

一、字符串运算符 #

PHP有两个字符串运算符:

运算符 名称 示例 说明
. 连接 $a . $b 连接两个字符串
.= 连接赋值 $a .= $b 连接后赋值给$a

二、连接运算符(.) #

2.1 基本连接 #

php
<?php
$a = "Hello";
$b = "World";
$result = $a . " " . $b;
echo $result;

2.2 连接不同类型 #

php
<?php
$name = "John";
$age = 25;
$price = 99.99;
$active = true;

echo "Name: " . $name . "\n";
echo "Age: " . $age . "\n";
echo "Price: " . $price . "\n";
echo "Active: " . $active . "\n";

2.3 自动类型转换 #

php
<?php
echo "Number: " . 42;
echo "Float: " . 3.14;
echo "Boolean: " . true;
echo "Boolean: " . false;
echo "Array: " . [1, 2, 3];
echo "Null: " . null;

2.4 复杂表达式 #

php
<?php
$a = 10;
$b = 20;
echo "Sum: " . ($a + $b);
echo "Sum: " . $a + $b;

三、连接赋值运算符(.=) #

3.1 基本用法 #

php
<?php
$message = "Hello";
$message .= " ";
$message .= "World";
$message .= "!";
echo $message;

3.2 构建字符串 #

php
<?php
$html = "";
$html .= "<div>";
$html .= "<h1>Title</h1>";
$html .= "<p>Content</p>";
$html .= "</div>";
echo $html;

3.3 循环中构建 #

php
<?php
$items = ['apple', 'banana', 'cherry'];
$list = "<ul>";

foreach ($items as $item) {
    $list .= "<li>$item</li>";
}

$list .= "</ul>";
echo $list;

3.4 日志构建 #

php
<?php
$log = "[" . date('Y-m-d H:i:s') . "]";
$log .= " [INFO]";
$log .= " User logged in";
$log .= "\n";
echo $log;

四、字符串插值 #

4.1 双引号插值 #

php
<?php
$name = "John";
$age = 25;

echo "Name: $name, Age: $age";
echo "Name: {$name}, Age: {$age}";
echo "Name: ${name}, Age: ${age}";

4.2 复杂表达式 #

php
<?php
$user = ['name' => 'John', 'age' => 25];

echo "Name: {$user['name']}";
echo "Age: {$user['age']}";

class Person {
    public $name = "John";
}
$person = new Person();
echo "Name: {$person->name}";

4.3 方法调用 #

php
<?php
class User {
    public function getName(): string {
        return "John";
    }
}
$user = new User();

echo "Name: {$user->getName()}";
echo "Name: " . $user->getName();

五、连接 vs 插值 #

5.1 性能比较 #

php
<?php
$name = "John";
$age = 25;

$result = $name . " is " . $age . " years old";
$result = "$name is $age years old";
$result = "{$name} is {$age} years old";

5.2 可读性 #

php
<?php
$firstName = "John";
$lastName = "Doe";

$fullName = $firstName . " " . $lastName;
$fullName = "$firstName $lastName";

5.3 复杂场景 #

php
<?php
$items = ['apple', 'banana'];

echo "Items: " . implode(", ", $items);
echo "Count: " . count($items);

六、Heredoc 与 Nowdoc #

6.1 Heredoc #

php
<?php
$name = "John";
$age = 25;

$text = <<<EOT
Name: $name
Age: $age
Status: Active
EOT;

echo $text;

6.2 Nowdoc #

php
<?php
$name = "John";

$text = <<<'EOT'
Name: $name
Variables are not parsed.
EOT;

echo $text;

6.3 实际应用 #

php
<?php
function generateEmail(string $name, string $content): string
{
    return <<<HTML
<!DOCTYPE html>
<html>
<head>
    <title>Email</title>
</head>
<body>
    <h1>Hello, {$name}!</h1>
    <p>{$content}</p>
</body>
</html>
HTML;
}

七、字符串函数 #

7.1 常用函数 #

php
<?php
$str = "Hello World";

echo strlen($str);
echo strtoupper($str);
echo strtolower($str);
echo ucfirst($str);
echo ucwords($str);
echo strrev($str);
echo str_replace("World", "PHP", $str);
echo substr($str, 0, 5);
echo strpos($str, "World");

7.2 格式化函数 #

php
<?php
$name = "John";
$age = 25;

printf("Name: %s, Age: %d\n", $name, $age);

$text = sprintf("Name: %s, Age: %d", $name, $age);
echo $text;

$price = 99.99;
printf("Price: %.2f\n", $price);
printf("Price: %01.2f\n", $price);

7.3 分割与连接 #

php
<?php
$str = "apple,banana,cherry";
$arr = explode(",", $str);
print_r($arr);

$arr = ['apple', 'banana', 'cherry'];
$str = implode(", ", $arr);
echo $str;

八、多行字符串 #

8.1 使用 Heredoc #

php
<?php
$sql = <<<SQL
SELECT u.id, u.name, u.email
FROM users u
WHERE u.status = 'active'
  AND u.created_at > '2024-01-01'
ORDER BY u.name ASC
LIMIT 10
SQL;

echo $sql;

8.2 使用连接 #

php
<?php
$sql = "SELECT u.id, u.name, u.email ";
$sql .= "FROM users u ";
$sql .= "WHERE u.status = 'active' ";
$sql .= "ORDER BY u.name ASC ";
$sql .= "LIMIT 10";

echo $sql;

8.3 数组连接 #

php
<?php
$sql = implode(" ", [
    "SELECT u.id, u.name, u.email",
    "FROM users u",
    "WHERE u.status = 'active'",
    "ORDER BY u.name ASC",
    "LIMIT 10"
]);

echo $sql;

九、最佳实践 #

9.1 选择合适的方式 #

php
<?php
$name = "John";

echo "Hello, $name!";
echo 'Hello, ' . $name . '!';

9.2 复杂表达式使用连接 #

php
<?php
$items = ['apple', 'banana'];
echo "Items: " . implode(", ", $items);

9.3 多行字符串使用 Heredoc #

php
<?php
$html = <<<HTML
<div class="container">
    <h1>{$title}</h1>
    <p>{$content}</p>
</div>
HTML;

9.4 SQL 查询 #

php
<?php
$sql = <<<SQL
SELECT * FROM users
WHERE status = :status
  AND created_at > :date
SQL;

十、总结 #

本章学习了:

  • 连接运算符(.)
  • 连接赋值运算符(.=)
  • 字符串插值
  • Heredoc 和 Nowdoc
  • 常用字符串函数

下一章将学习数组运算符。

最后更新:2026-03-26