Hướng dẫn is string mutable in php? - chuỗi có thể thay đổi trong php không?

Một trong những kỹ thuật tối ưu hóa tốc độ thiết yếu nhất trong nhiều ngôn ngữ là tái sử dụng ví dụ. Trong trường hợp đó, tốc độ tăng đến từ ít nhất 2 yếu tố:

1. Ít khởi tạo hơn có nghĩa là ít thời gian hơn cho việc xây dựng.

2. Càng ít lượng bộ nhớ mà ứng dụng sử dụng, bộ đệm CPU càng ít bỏ lỡ.

Đối với các ứng dụng, trong đó tốc độ là ưu tiên số 1, tồn tại một nút cổ chai thực sự chặt chẽ giữa CPU và RAM. Một trong những lý do cho tắc nghẽn là độ trễ của RAM.

PHP, Ruby, Python, v.v., có liên quan đến các bản sao bộ đệm bởi một thực tế là ngay cả chúng lưu trữ ít nhất một số (có lẽ là tất cả) dữ liệu thời gian chạy của các chương trình được giải thích trong RAM.

Việc khởi tạo chuỗi là một trong những hoạt động được thực hiện khá thường xuyên, với số lượng tương đối "lớn" và nó có thể có tác động đáng chú ý đến tốc độ.

Đây là Run_Test.Bash của một thử nghiệm đo lường:

#!/bin/bash

for i in `seq 1 200`;
do
        /usr/bin/time -p -a -o ./measuring_data.rb  php5 ./string_instantiation_speedtest.php
done

Dưới đây là ./string_instantiation_speedtest.php và kết quả đo lường:


Kết luận của tôi từ thí nghiệm này và một thử nghiệm khác mà tôi đã làm với Ruby 1.8 là nó có ý nghĩa để truyền các giá trị chuỗi xung quanh bằng cách tham khảo.

Một cách có thể để cho phép "từng chuỗi vượt qua" diễn ra tại toàn bộ phạm vi ứng dụng là liên tục tạo một thể hiện chuỗi mới, bất cứ khi nào một người cần sử dụng phiên bản sửa đổi của chuỗi.

Do đó, để tăng tốc độ địa phương, người ta có thể muốn giảm lượng bộ nhớ mà mỗi toán hạng tiêu thụ. Thử nghiệm sau đây cho thấy trường hợp kết nối chuỗi:


Ví dụ: nếu một người tập hợp các trang HTML chứa lượng văn bản đáng kể, thì người ta có thể muốn nghĩ về thứ tự, các phần khác nhau của HTML được tạo được liên kết với nhau như thế nào.

Một triển khai PHP được cấp phép BSD và triển khai RUBY của thuật toán nối chuỗi đầu nguồn có sẵn. Thuật toán tương tự có thể (đã được tôi) khái quát hóa để tăng tốc độ nhân của các số nguyên chính xác tùy ý.

  • Nói chung
  • Để lại một bình luận


7

Sách / Ngôn ngữ lập trình PHP / Chương 13/ The PHP Programming Language / Chapter 13

Như chúng tôi đã thấy trước đây, PHP có loại chuỗi tích hợp. Trong nội bộ, các chuỗi PHP chỉ đơn giản là một chuỗi các byte, nhưng với mục đích của chúng tôi, chúng tôi có thể coi nó như một mảng ký tự 0 được chỉ số. Các chuỗi PHP có thể thay đổi và có thể được thay đổi, nhưng nó được coi là thực hành tốt nhất để coi chúng là bất biến và dựa vào nhiều chức năng mà PHP cung cấp để thao tác các chuỗi.

Điều cơ bản

Chúng ta có thể tạo chuỗi bằng cách gán một giá trị theo nghĩa đen cho một biến. Chuỗi có thể được chỉ định bởi các trích dẫn đơn hoặc trích dẫn kép (không có ký tự riêng lẻ trong PHP, chỉ có chuỗi ký tự đơn), nhưng chúng tôi sẽ sử dụng cú pháp trích dẫn kép.

$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";

Việc phân công lại trong dòng cuối cùng trong ví dụ phá hủy hiệu quả chuỗi cũ. Toán tử gán cũng có thể được sử dụng để tạo các bản sao của chuỗi.

$firstName = "Thomas";
$alias = $firstName;

Điều quan trọng là phải hiểu rằng bài tập này tạo ra một bản sao sâu của chuỗi. Thay đổi thành thứ nhất không ảnh hưởng đến cái thứ hai. Bạn có thể thay đổi các ký tự riêng lẻ trong một chuỗi bằng cách coi nó giống như một mảng không chỉ số.deep copy of the string. Changes to the first do not affect the second one. You can make changes to individual characters in a string by treating it like a zero-indexed array.

$a = "hello";
$a[0] = "H";
$a[5] = "!";
//a is now "Hello!"

Dòng cuối cùng mở rộng chuỗi bằng cách thêm một ký tự bổ sung. Bạn thậm chí có thể xóa các ký tự bằng cách đặt chúng vào chuỗi trống.

$a = "Apples!";
$a[5] = "";
//a is now "Apple!"

Chuỗi chức năng

PHP cung cấp hàng tá chức năng thuận tiện cho phép bạn xử lý và sửa đổi chuỗi. Chúng tôi nhấn mạnh một vài trong số những cái phổ biến hơn ở đây. Một danh sách đầy đủ các chức năng được hỗ trợ có thể được tìm thấy trong tài liệu tiêu chuẩn. Do lịch sử của PHP, nhiều chức năng tương tự được xác định trong thư viện chuỗi C cũng có thể được sử dụng trong PHP.

Chiều dài

Khi truy cập các ký tự riêng lẻ trong một chuỗi, chúng ta cần biết độ dài của chuỗi để chúng ta không truy cập các ký tự không hợp lệ (mặc dù làm như vậy không phải là lỗi, nó chỉ dẫn đến


8). Hàm

9 trả về một số nguyên đại diện cho số lượng ký tự trong chuỗi.

$s = "Hello World!";
$x = strlen($s); //x is 12
$s = "";
$x = strlen($s); //x is 0

//careful:
$s = NULL
$x = strlen($s); //x is 0

Như đã trình bày trong ví dụ cuối cùng,


9 sẽ trả về 0 cho các chuỗi

8. Hãy nhớ lại rằng chúng ta có thể phân biệt giữa hai tình huống này bằng cách sử dụng

2. Sử dụng chức năng này, chúng tôi có thể lặp lại từng ký tự riêng lẻ trong một chuỗi.

$fullName = "Tom Waits";
for($i=0; $i<strlen($fullName); $i++) {
    printf("fullName[%d] = %s\n", $i, $fullName[$i]);
}

Điều này sẽ in như sau:

fullName[0] = T
fullName[1] = o
fullName[2] = m
fullName[3] =
fullName[4] = W
fullName[5] = a
fullName[6] = i
fullName[7] = t
fullName[8] = s

Kết nối

PHP có một toán tử nối được tích hợp vào ngôn ngữ. Để kết hợp một hoặc nhiều chuỗi với nhau, bạn có thể sử dụng một khoảng thời gian đơn giản giữa chúng làm toán tử nối. Kết quả kết hợp trong một chuỗi mới.


0

Concatenation cũng hoạt động với các loại biến khác.


1

Tính toán một chuỗi con

PHP cung cấp một chức năng đơn giản,


3 để tính toán một chuỗi con của chuỗi. Nó mất ít nhất 2 đối số: chuỗi để hoạt động và chỉ mục bắt đầu. Có một tham số thứ ba, tùy chọn cho phép bạn chỉ định độ dài của chuỗi con kết quả.


2

Trong ví dụ cuối cùng, bỏ qua tham số độ dài tùy chọn dẫn đến toàn bộ phần còn lại của chuỗi được trả về dưới dạng chuỗi con.

Mảng chuỗi

Chúng ta thường cần phải đối phó với các bộ sưu tập dây. Trong PHP, chúng ta có thể xác định các mảng của chuỗi. Thật vậy, chúng tôi đã thấy các mảng chuỗi trước đây. Khi xử lý các đối số dòng lệnh, PHP xác định một mảng các chuỗi,


4. Mỗi chuỗi có thể được truy cập bằng một chỉ mục, ví dụ

5 luôn là tên của tập lệnh.

Chúng ta có thể tạo các mảng chuỗi của riêng mình bằng cách sử dụng cùng một cú pháp như với các mảng khác.


3

So sánh chuỗi

Khi so sánh các chuỗi trong PHP, chúng ta có thể sử dụng các toán tử so sánh thông thường như


6,

7 hoặc

8 sẽ so sánh các chuỗi từ vựng. Tuy nhiên, điều này thường không được khuyến khích vì loại vấn đề tung hứng và so sánh bất bình đẳng/bất bình đẳng nghiêm ngặt. Thay vào đó, có một số phương pháp so sánh mà PHP cung cấp để so sánh các chuỗi dựa trên nội dung của chúng.

9 mất hai chuỗi và trả về một số nguyên dựa trên thứ tự từ vựng của
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
0 và
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
1. Nếu
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
0 đi trước
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
1,
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
4 trả về một cái gì đó tiêu cực. Nó trả về 0 nếu
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
0 và
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
1 có cùng nội dung. Nếu không, nó sẽ trả về một cái gì đó tích cực nếu
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
1 đi trước
$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
0.


4

Trong ví dụ cuối cùng,

$firstName = "Thomas";
$lastName = "Waits";

//we can also reassign values
$firstName = "Tom";
9 đi trước
$firstName = "Thomas";
$alias = $firstName;
0 vì các chữ cái viết hoa được đặt hàng trước các chữ cái viết thường theo bảng ASCII. Chúng ta cũng có thể thực hiện các so sánh không nhạy cảm với trường hợp nếu chúng ta cần sử dụng phương án thay thế,
$firstName = "Thomas";
$alias = $firstName;
1. Ở đây,
$firstName = "Thomas";
$alias = $firstName;
2 sẽ trả về số 0 vì hai chuỗi giống nhau bỏ qua các trường hợp.

Các hàm so sánh cũng có các phiên bản giới hạn độ dài,

$firstName = "Thomas";
$alias = $firstName;
3 và
$firstName = "Thomas";
$alias = $firstName;
4. Cả hai sẽ chỉ so sánh trong các ký tự
$firstName = "Thomas";
$alias = $firstName;
5 đầu tiên của các chuỗi. Do đó,
$firstName = "Thomas";
$alias = $firstName;
6 sẽ dẫn đến 0 vì hai chuỗi bằng nhau trong 5 ký tự đầu tiên.

Chia một chuỗi trong PHP

Mã thông báo là quá trình phân tách một chuỗi dọc theo một số dấu phân cách. Ví dụ: chuỗi được phân định dấu phẩy,

$firstName = "Thomas";
$alias = $firstName;
7 chứa bốn phần dữ liệu được phân định bởi dấu phẩy. Mục đích của chúng tôi là chia chuỗi này lên thành bốn chuỗi riêng biệt để chúng tôi có thể xử lý từng chuỗi. PHP cung cấp một số chức năng cho vấn đề này,
$firstName = "Thomas";
$alias = $firstName;
8 và
$firstName = "Thomas";
$alias = $firstName;
9.

Cái đơn giản hơn,

$firstName = "Thomas";
$alias = $firstName;
8 có hai đối số: cái đầu tiên là dấu phân cách chuỗi và thứ hai là chuỗi được xử lý. Sau đó, nó trả về một mảng chuỗi.


5

$firstName = "Thomas";
$alias = $firstName;
9 tinh vi hơn cũng có hai đối số, 1 nhưng thay vì một dấu phân cách đơn giản, nó sử dụng một biểu thức chính quy; Một chuỗi các ký tự xác định mẫu tìm kiếm trong đó các ký tự đặc biệt có thể được sử dụng để xác định các mẫu phức tạp. Ví dụ, biểu thức phức tạp
$a = "hello";
$a[0] = "H";
$a[5] = "!";
//a is now "Hello!"
2 sẽ phù hợp với bất kỳ giá trị số hợp lệ nào bao gồm cả ký hiệu khoa học. Chúng tôi sẽ không bao gồm các biểu thức thông thường theo chiều sâu, nhưng để chứng minh tính hữu dụng của chúng, ở đây, một ví dụ mà bạn có thể chia một chuỗi dọc theo bất kỳ và tất cả khoảng trắng:


6


Giấy phép và phân bổ


Nói lên suy nghĩ của bạn

Chuỗi có thể thay đổi hoặc bất biến trong PHP?

Chuỗi PHP là bất biến.immutable.

Chuỗi có phải là biến đổi không?

Chuỗi là một ví dụ về một loại bất biến.Một đối tượng chuỗi luôn đại diện cho cùng một chuỗi.StringBuilder là một ví dụ về một loại có thể thay đổi.Nó có các phương thức để xóa các phần của chuỗi, chèn hoặc thay thế các ký tự, v.v.. A String object always represents the same string. StringBuilder is an example of a mutable type. It has methods to delete parts of the string, insert or replace characters, etc.

Chuỗi có phải là một đối tượng trong PHP không?

Chuỗi không phải là đối tượng trong PHP..

Các biến chuỗi có thể biến đổi không?

Chuỗi là một loại dữ liệu bất biến có nghĩa là giá trị của nó không thể được cập nhật. which means that its value cannot be updated.