Hướng dẫn dùng abstr trong PHP

Chuỗi ký tự (string) là loại cấu trúc dữ liệu quen thuộc có mặt trong gần như mọi ngôn ngữ lập trình. Kiểu chuỗi ký tự dùng để chứa thông tin về tên người, mật khẩu, địa chỉ, số thẻ ngân hàng, v.v.

Trên thực tế ngay từ những bài học đầu tiên của bất kỳ ngôn ngữ lập trình nào bạn cũng đều tiếp xúc với chuỗi ký tự qua chương trình Hello world!

Có thể nói đây là kiểu dữ liệu cơ bản được sử dụng rộng rãi nhất trong PHP.

PHP cho phép viết giá trị của chuỗi ký tự theo ba cách khác nhau:

  1. Viết các ký tự trong cặp nháy đơn.
  2. Viết các ký tự trong cặp nháy kép.
  3. Viết theo kiểu heredoc.

Cách viết giá trị của chuỗi được gọi là string literal.

NỘI DUNG CỦA BÀI

Viết chuỗi ký tự (string literal) trong PHP với dấu nháy đơn

Cặp dấu nháy đơn có thể dùng để phân định những gì nằm trong chuỗi. Tất cả những gì nằm giữa cặp dấu này là nội dung của chuỗi.

Ví dụ:

$name = 'Donald Trump';
// sử dụng \' để biểu diễn cho chính ký tự ' trong chuỗi
$greeting = 'Hello, my name\'s Donald.'; 
// có thể sử dụng dấu nháy kép trong chuỗi
$sentence = '"Hello, Donald" - he said';
// sử dụng \\ để biểu diễn cho \
$path = 'C:\\PHP\\bin\;
$php = 'C:\php';
// có thể viết chuỗi ký tự trải dài trên nhiều dòng
$people = 'Donald Trump
Barack Obama
George Bush
Bill Clinton';

Khi sử dụng cặp nháy đơn lưu ý:

(1) Sử dụng

9 để biểu diễn 
$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
0:

Do dấu nháy đơn đã được dùng để phân định ranh giới của chuỗi, bên trong chuỗi bạn không được trực tiếp sử dụng ký tự nháy đơn. Nếu cần sử dụng dấu nháy đơn, bạn phải viết

9 thay cho 
$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
0. Đây là tình huống của chuỗi $greeting.

(2) Sử dụng

$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
3 để biểu diễn
$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
4:

Tình huống 1 cho thấy

$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
4 cũng là một ký tự đặc biệt trong chuỗi. Bạn cũng không thể sử dụng trực tiếp \ trong chuỗi, thay vào đó, nếu cần biểu diễn ký tự
$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
4, bạn cần viết
$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
3. Đây là tình huống bạn gặp trong chuỗi $path.

Các cụm ký tự

$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
3 và
9 được gọi là escape sequence (chuỗi thoát). Chỉ có hai escape sequence này sử dụng được với chuỗi trong dấu nháy đơn. Chúng ta sẽ nói kỹ hơn về escape sequence trong phần sau của bài học.

Với chuỗi trong dấu nháy kép sẽ có thêm một số chuỗi escape sequence khác nữa.

(3) Sử dụng dấu nháy kép trong chuỗi:

Bên trong chuỗi có thể sử dụng dấu nháy kép. Dấu nháy kép trong chuỗi này chỉ là một ký tự bình thường. Bạn đã gặp cách sử dụng này trong chuỗi $sentence.

(4) Viết chuỗi trên nhiều dòng:

Chuỗi ký tự biểu diễn bằng cặp nháy đơn có thể trải dài trên nhiều dòng như giá trị của biến $people ở trên. Đây là điều rất khác biệt với các ngôn ngữ khác. Nhờ đặc thù này có thể dễ dàng tạo ra các khối văn bản HTML động.

Viết chuỗi ký tự trong PHP với dấu nháy kép

Cặp dấu nháy kép được sử dụng tương tự như cặp dấu nháy đơn để phân định ranh giới của chuỗi ký tự. Nhìn chung cách sử dụng cơ bản của cặp nháy kép không khác biệt với cặp nháy đơn.

Hãy xem ví dụ sau đây:

Ví dụ này chỉ thay cặp dấu nháy đơn bằng nháy kép.

Tuy nhiên, chuỗi trong cặp nháy kép có hai điểm khác biệt lớn với chuỗi trong cặp nháy đơn:

  • Sử dụng được nhiều escape sequence khác.
  • Có thể sử dụng tên biến trong chuỗi.

Như ở trên đã nói, chuỗi trong cặp nháy đơn chỉ hỗ trợ hai escape sequence

9 và 
$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
3. Chuỗi trong cặp nháy kép hỗ trợ các escape sequence sau:

  • \” – dấu nháy kép. Dùng để biểu diễn chính dấu nháy kép trong chuỗi.
  • \n – thêm dòng mới.
  • \r – chuyển con trỏ văn bản về đầu dòng.
  • \t – dấu tab.
  • \\ – dấu \.
  • \{, \} – dấu { và }
  • \[, \] – dấu [ và ]
  • \0 đến \777 – các ký tự ascii biểu diễn ở cơ số 8
  • \x0 đến \xff – các ký tự ascii biểu diễn ở cơ số 16.

Một đặc điểm khá lạ của escape sequence trong PHP nằm ở chỗ, nếu một cụm ký tự bắt đầu bằng \ nhưng không phải là một escape sequence tiêu chuẩn, PHP sẽ tự động bỏ qua sequence này chứ không báo lỗi.

Lấy ví dụ, trong lệnh

Hello, Donald Trump. You are 70 years old. Welcome to heaven!
2 (hoặc
Hello, Donald Trump. You are 70 years old. Welcome to heaven!
3)
Hello, Donald Trump. You are 70 years old. Welcome to heaven!
4 và
Hello, Donald Trump. You are 70 years old. Welcome to heaven!
5 sẽ không được coi là escape sequence mà chỉ là ký tự
$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;
4 thông thường. PHP không coi đây là một lỗi. Do vậy, lệnh trên vẫn tạo ra một chuỗi ký tự chính xác!

Nếu bạn đặt một tên biến trong chuỗi tạo từ cặp nháy kép, PHP sẽ tự động chèn giá trị của biến vào chuỗi. Cơ chế này trong PHP có tên gọi là variable interpolation (nội suy biến).

$name = "Donald Trump";
$age = 70;
$greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
echo $greeting;

Kết quả chạy script là

Hello, Donald Trump. You are 70 years old. Welcome to heaven!

Đây là cách thức rất tiện lợi để tạo ra chuỗi ký tự động từ biến và biểu thức.

Nếu không có nhu cầu sử dụng escape sequence hoặc variable interpolation, bạn nên sử dụng chuỗi trong cặp nháy đơn.

Viết chuỗi ký tự trong PHP theo kiểu Heredoc

Heredoc là lối viết chuỗi ký tự trên nhiều dòng đặc thù của PHP. Hãy xem ví dụ sau:

Chạy script trên bạn thu được kết quả như sau:

E:\OneDrive\TuHocICT\LearnPHP\Basic>php heredoc.php
Hello world!
This is a long PHP string,
which is written in multiple lines.
This type of string is called heredoc in PHP.
tab tab tab

Nếu sử dụng interactive shell thì kết quả như sau:

E:\OneDrive\TuHocICT\LearnPHP\Basic>php -a
Interactive shell
php > $greeting = << Hello world!
<<< > This is a long PHP string,
<<< > which is written in multiple lines.
<<< > This type of strings is called heredoc in PHP.
<<< > GREETING;
php > echo $greeting;
Hello world!
This is a long PHP string,
which is written in multiple lines.
This type of strings is called heredoc in PHP.
php >

Trong cách viết heredoc chú ý: sau <<< sẽ là cụm ký tự đánh dấu. Trong ví dụ trên cụm ký tự đánh dấu là GREETING.

Cụm đánh dấu có tác dụng báo nơi bắt đầu và kết thúc của chuỗi heredoc. Tất cả những dòng văn bản nằm giữa hai cụm ký tự đánh dấu sẽ là nội dung của chuỗi.

Trong chuỗi heredoc bạn có thể sử dụng dấu nháy đơn ‘ và dấu nháy kép ” vì ở đây chúng không còn tác dụng phân định chuỗi nữa.

Bên trong chuỗi heredoc có thể sử dụng các escape sequence và variable interpolation giống như trường hợp chuỗi trong cặp nháy kép.

Các phép toán trên chuỗi ký tự

PHP cung cấp các phép toán sau trên kiểu chuỗi.

Truy xuất ký tự của chuỗi, phép toán []

Sử dụng phép toán [] để truy xuất từng ký tự trong chuỗi.

php > $name = 'Donald';
php > echo $name[0],' ',$name[1],' ',$name[2];
D o n
php >

Chú ý, ký tự đầu tiên của chuỗi (nếu chuỗi không rỗng) sẽ có chỉ số (index) bằng 0.

Nếu chuỗi không chứa bất kỳ ký tự nào thì nó được gọi là chuỗi rỗng. Ký hiệu chuỗi rỗng là ” hoặc “” (chỉ có cặp dấu nháy đơn hoặc cặp dấu nháy kép).

Khi truy xuất phần tử của chuỗi rỗng sẽ gặp thông báo

Hello, Donald Trump. You are 70 years old. Welcome to heaven!
7.

Phép ghép xâu

PHP cung cấp phép toán

Hello, Donald Trump. You are 70 years old. Welcome to heaven!
8 để ghép các xâu con thành một xâu lớn. Hãy xem ví dụ sau:

php > $str1 = 'Hello';
php > $str2 = 'world';
php > $str = $str1.' '.$str2;
php > echo $str;
Hello world
php >

PHP cũng tạo ra phiên bản phép gán tương ứng của phép ghép xâu:

php > $str = 'Hello';
php > $str .= ' world'; // tương đương $str = $str . ' world';
php > echo $str;
Hello world
php >

Phép gán

Hello, Donald Trump. You are 70 years old. Welcome to heaven!
9 tương đương với
0.

Các phép so sánh

PHP hỗ trợ đầy đủ các phép so sánh trên các chuỗi ký tự, tương tự như đối với kiểu số.

Phép toánÝ nghĩaLớn hơn>=Lớn hơn hoặc bằng==So sánh bằng!=So sánh khác<>So sánh khác<=>Phép so sánh spaceship

Có thể để ý PHP có hai phép toán so sánh khác != và <>. Hai phép toán này không có gì khác biệt nhau.

Phép so sánh spaceship không trả lại kết quả logic true/false mà trả về kết quả số nguyên: -1 nếu vế trái nhỏ hơn; +1 nếu vế trái lớn hơn; 0 nếu hai vế bằng nhau.

Các phép so sánh bằng và khác trong PHP có thể áp dụng với hai vế thuộc hai kiểu khác nhau! Ví dụ, có thể so sánh chuỗi với số! Ngoài các phép so sánh trên trong PHP còn có các phép toán so sánh tương tự ===, !==.

Chúng ta sẽ xem xét kỹ hơn về các phép toán so sánh trong bài học về kiểu boolean.

Một số hàm xử lý chuỗi ký tự trong PHP

PHP cung cấp khá nhiều hàm xử lý chuỗi ký tự. Sau đây chúng ta sẽ xem xét những hàm cơ bản và thông dụng.

Xác định độ dài chuỗi

Sử dụng hàm

1() để xác định số lượng ký tự (độ dài) chuỗi:

0

Xóa ký tự trống

Xóa ký tự trống là một bước trong quá trình chuẩn hóa xâu ký tự trước khi xử lý. PHP tự động coi dấu cách, dấu tab \t, ký tự xuống dòng \n, ký tự chuyển về đầu dòng \r, NUL-byte \0, dấu tab đứng \x0B là ký tự trống.

PHP cung cấp các hàm

2(), 
3(), 
4() để xóa ký tự trống trong chuỗi, trong đó:

  • ltrim() xóa ký tự trống ở đầu chuỗi;
  • rtrim() xóa ký tự trống ở cuối chuỗi;
  • trim() xóa ở cả đầu và cuối chuỗi.
1

Các hàm này nhận tham số thứ hai (không bắt buộc) là chuỗi chứa các ký tự cần xóa (nếu gặp ở đầu/cuối chuỗi):

2

Chuyển đổi hoa/thường

PHP cung cấp các hàm chuyển đổi hoa thường sau: strtolower(), strtoupper(), ucfirst(), ucwords().

3

Trích chuỗi con

Có thể trích một phần của chuỗi ra một biến mới bằng hàm substr():

$str = substr(string, start [, length]);

Trong đó: start là vị trí bắt đầu lấy, length là số ký tự cần lấy. Hàm substr() không làm thay đổi xâu gốc.

4

Tìm kiếm trong chuỗi

Tìm-và-thay-thế là yêu cầu rất thường gặp trong xử lý văn bản. PHP cung cấp hàm strpos() để xác định vị trí của một xâu con trong một xâu khác:

5

5

Hàm strpos() trả lại vị trí đầu tiên mà xâu con xuất hiện trong xâu lớn. Ở ví dụ trên, xâu ‘Donald’ xuất hiện ở vị trí số 13 trong xâu lớn $str.

Nếu không tìm thấy xâu con, strpost trả lại false (dưới dạng một xâu trống).

Một cách khác để tìm kiếm trong chuỗi là sử dụng hàm substr_count():

6

Hàm này trả lại số lần bắt gặp một chuỗi con $needle trong chuỗi lớn $haystack. Hãy xem ví dụ sau:

6

Trong ví dụ trên, chuỗi con ‘program’ xuất hiện hai lần trong chuỗi lớn $big_str.

Thay thế văn bản trong chuỗi

PHP cung cấp hàm str_replace() cho công việc này. Hãy xem cách sử dụng hàm str_replace() qua ví dụ dưới đây:

7

Cú pháp của str_replace() như sau:

8

Theo đó, 3 tham số bắt buộc là: $search – chuỗi cần tìm (để thay thế), $replace – chuỗi thay thế, $subject – chuỗi nguồn. Kết quả trả về là một chuỗi mới trong đó $replace đã thay thế cho $search.