Chuỗi | Thichthichieu

Chuỗi Một chuỗi là một dãy các ký tự mà có độ lớn như nhau. Như vậy nghĩa là PHP chỉ hỗ trợ 256-character và không hỗ trợ Unicode. Lưu ý: Một chuỗi có thể lớn đến 2GB.

Cú pháp Một chuỗi có thể được xác định bằng bốn cách sau: – dấu nháy đơn – dấu nháy kép – cú pháp heredoc – cú pháp nowdoc (từ PHP 5.3.0)

Nháy đơn Cách đơn giản nhất để xác định một chuỗi là bọc nó trong một cặp nháy đơn (ký tự ‘).

Tuy nhiên trong chuỗi đó có một dấu nháy đơn ta sẽ đặt trước nó một dấu gách chéo (\). Nếu trong chuỗi đó có dấu gạch chéo, ta sẽ đặt trước nó một dấu gạch chéo nữa (\\). Tất cả các trường hợp khác sẽ xuất thẳng ra dấu gạch chéo mà không có thể hiện đặc biệt gì, ví dụ như \r hoặc \n sẽ xuất ra vẫn như vậy.

Lưu ý: Không giống như cú pháp nháy kép và heredoc, các biến và các ký tự đặc biệt sẽ không dùng được khi sử dụng nháy đơn.

<?php echo 'this is a simple string';

echo 'You can also have embedded newlines in strings this way as it is okay to do';

// Outputs: Arnold once said: "I'll be back" echo 'Arnold once said: "I\'ll be back"';

// Outputs: You deleted C:\*.*? echo 'You deleted C:\\*.*?';

// Outputs: You deleted C:\*.*? echo 'You deleted C:\*.*?';

// Outputs: This will not expand: \n a newline echo 'This will not expand: \n a newline';

// Outputs: Variables do not $expand $either echo 'Variables do not $expand $either'; ?>

Nháy kép Nếu một chuỗi được đặt trong một cặp nháy kép, PHP sẽ phiên dịch nhiều dãy ký tự đặc biệt hơn.

Heredoc Cách thứ ba để xác định một chuỗi bằng cú pháp <<<. Sau chuỗi này, một bộ định danh được cung cấp, sau đó là một dùng mới. Chuỗi được theo sau ngay đó, và một định danh giống lúc đầu sẽ được dùng để kết thúc chuỗi.

Định danh kết thúc PHẢI được bắt đầu ở cột đầu tiên. Và cũng giống như các nhãn khác trong PHP, định danh có cùng các quy tắc đặt tên, đó là chỉ gồm chữ và số hoặc dấu gạch dưới, và không được bắt đầu bằng một số hay dấu gạc dưới.

Chú ý: Một lưu ý quan trọng đó là ở dòng định danh kết thúc không được chứa bất kỳ ký tự nào khác, chẳng hạn như ký tự kết thúc (;). Nếu có, điều này sẽ làm định danh không được định danh. Sau định danh kết thúc phải là một dòng mới được xác định bởi hệ điều hành của bạn. Đó là \n với hệ thống UNIX, và cả Mac OS X. Nhắc lại, sau chuỗi kết định danh phải là một dòng mới.

Heredoc sẽ không dùng được khi khởi tạo một class.

<?php class foo { public $bar = <<<EOT bar EOT; } ?>

Heredoc về cơ bản khá giống với kiểu nháy kép. Các dầu nháy kép trong heredoc sẽ không bị lỗi, tuy nhiên các biến và ký tự đặc biệt vẫn dùng được.

<?php $str = <<<EOD Example of string spanning multiple lines using heredoc syntax. EOD;

/* More complex example, with variables. */ class foo { var $foo; var $bar;

function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } }

$foo = new foo(); $name = 'MyName';

echo <<<EOT My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; ?>

Ví dụ trên sẽ có đầu ra: My name is "MyName". I am printing some Foo. Now, I am printing some Bar2. This should print a capital 'A': A

Bạn cũng có thể dùng heredoc để đưa dữ liệu vào trong các hàm.

<?php var_dump(array(<<<EOD foobar! EOD )); ?>

Từ phiên bản 5.3.0, có thể dùng heredoc khi khởi tạo một biến tĩnh hoặc hằng/thuộc tính trong lớp.

<?php // Static variables function foo() { static $bar = <<<LABEL Nothing in here... LABEL; }

// Class properties/constants class foo { const BAR = <<<FOOBAR Constant example FOOBAR;

public $baz = <<<FOOBAR Property example FOOBAR; } ?>

Từ phiên bản 5.3.0, định danh mở có thể chứa thêm dấu nháy kép.

<?php echo <<<"FOOBAR" Hello World! FOOBAR; ?>

Nowdoc Nowdoc giống như nháy đơn còn heredoc thì giống nháy kép. Các xác định một nowdoc cũng rất giống heredoc, nhưng trong nowdoc sẽ không phân tích. Trong nowdoc có thể nhúng các mã PHP hay một khối text lớn mà không gặp lỗi.

Một nowdoc sẽ được định danh trước <<< giống như heredoc, nhưng được bọc trong một cặp nháy đơn, ví dụ <<<‘EOT’. Các quy tắc của nowdoc cũng giống như heredoc.

<?php $str = <<<'EOD' Example of string spanning multiple lines using nowdoc syntax. EOD;

/* More complex example, with variables. */ class foo { public $foo; public $bar;

function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } }

$foo = new foo(); $name = 'MyName';

echo <<<'EOT' My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should not print a capital 'A': \x41 EOT; ?>

Đầu ra của ví dụ trên: My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should not print a capital 'A': \x41

Lưu ý: Không giống như heredoc, nowdoc có thể sử dụng cho bất kỳ nội dung tĩnh nào, ví dụ như dùng cho việc khởi tạo thuộc tính hay hằng của class.

<?php class foo { public $bar = <<<'EOT' bar EOT; } ?>

Lưu ý: Nowdoc được thêm vào từ phiên bản PHP 5.3.0

Phân tích chuỗi Khi một chuỗi được đặt trong một cặp nháy kép hoặc một heredoc, biến đặt trong đó sẽ được biên dịch.

Có hai kiểu trong cú pháp này: đơn giản và phức tạp. Cú pháp đơn giản thì phổ biến và thuận tiện hơn. Nó giúp cho việc nhúng các biến, giá trị mảng, thuộc tính đối tượng vào trong một chuỗi tốn ít công sức hơn.

Cú pháp phức tạp sẽ đặt một cặp ngoặc nhọn quanh biểu thức.

Cú pháp đơn giản Nếu ký tự đô-la ($) xuất hiện trong chuỗi, bộ phân tích sẽ cố gắng tìm sau nó một tên biến hợp lệ. Bọc biến của bạn bằng một cặp ngoặc nhọn sẽ nâng cao tính chính xác.

<?php $juice = "apple";

echo "He drank some $juice juice.".PHP_EOL; // Invalid. "s" is a valid character for a variable name, but the variable is $juice. echo "He drank some juice made of $juices."; ?> Đầu ra của ví dụ trên: He drank some apple juice. He drank some juice made of .

Tương tự thì một phần tử mảng hoặc một thuộc tính đối tượng cũng có thể được biên dịch như vậy. Với chỉ số mảng, đặt chúng trong một cặp ngoặc vuông ([]).

<?php $juices = array("apple", "orange", "koolaid1" => "purple");

echo "He drank some $juices[0] juice.".PHP_EOL; echo "He drank some $juices[1] juice.".PHP_EOL; echo "He drank some $juices[koolaid1] juice.".PHP_EOL;

class people { public $john = "John Smith"; public $jane = "Jane Smith"; public $robert = "Robert Paulsen";

public $smith = "Smith"; }

$people = new people();

echo "$people->john drank some $juices[0] juice.".PHP_EOL; echo "$people->john then said hello to $people->jane.".PHP_EOL; echo "$people->john's wife greeted $people->robert.".PHP_EOL; echo "$people->robert greeted the two $people->smiths."; // Won't work ?> Đầu ra của ví dụ trên He drank some apple juice. He drank some orange juice. He drank some purple juice. John Smith drank some apple juice. John Smith then said hello to Jane Smith. John Smith's wife greeted Robert Paulsen. Robert Paulsen greeted the two .

Với những trường hợp phức tạp hơn, bạn nên dùng kiểu cú pháp phức tạp.

Cú pháp phức tạp Không phải gọi đây là cú pháp phức tạp bởi vì nó phức tạp, nhưng nó sẽ phù hợp với các biểu thức phức tạp.

Bất cứ một biến, phần tử mảng hay thuộc tính đối tượng nào cũng có thể biểu diễn bằng cú pháp này. Đơn giản là cách viết giống với bên ngoài chuỗi, chỉ cần bọc biến vào trong một cặp ngoặc nhọn. Cách viết sẽ không được nhận nếu $ và { không liền nhau. Sử dụng {\$ để viết {$. Xem ví dụ dưới đây để rõ hơn:

<?php // Show all errors error_reporting(E_ALL);

$great = 'fantastic';

// Won't work, outputs: This is { fantastic} echo "This is { $great}";

// Works, outputs: This is fantastic echo "This is {$great}"; echo "This is ${great}";

// Works echo "This square is {$square->width}00 centimeters broad.";

// Works, quoted keys only work using the curly brace syntax echo "This works: {$arr['key']}";

// Works echo "This works: {$arr[4][3]}";

// This is wrong for the same reason as $foo[bar] is wrong  outside a string. // In other words, it will still work, but only because PHP first looks for a // constant named foo; an error of level E_NOTICE (undefined constant) will be // thrown. echo "This is wrong: {$arr[foo][3]}";

// Works. When using multi-dimensional arrays, always use braces around arrays // when inside of strings echo "This works: {$arr['foo'][3]}";

// Works. echo "This works: " . $arr['foo'][3];

echo "This works too: {$obj->values[3]->name}";

echo "This is the value of the var named $name: {${$name}}";

echo "This is the value of the var named by the return value of getName(): {${getName()}}";

echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";

// Won't work, outputs: This is the return value of getName(): {getName()} echo "This is the return value of getName(): {getName()}"; ?>

Và cũng hợp lệ khi dùng với các thuộc tính của đối tượng.

<?php class foo { var $bar = 'I am bar.'; }

$foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo "{$foo->$bar}\n"; echo "{$foo->$baz[1]}\n"; ?> Đầu ra của ví dụ trên: I am bar. I am bar. Lưu ý: Các hàm, phương thức gọi, biến lớp tĩnh, và hằng của lớp bên trong {$} hoạt động từ PHP5. Tuy nhiên, giá trị này sẽ được phiên dịch từ giá trị mà hằng đấy định nghĩa. Chỉ dùng một cặp ngoặc nhọn sẽ không hoạt động trong các trường hợp gọi các giá trị hàm hoặc phương thức hoặc giá trị của hằng hay biến tĩnh của lớp.

<?php // Show all errors. error_reporting(E_ALL);

class beers { const softdrink = 'rootbeer'; public static $ale = 'ipa'; }

$rootbeer = 'A & W'; $ipa = 'Alexander Keith\'s';

// This works; outputs: I'd like an A & W echo "I'd like an {${beers::softdrink}}\n";

// This works too; outputs: I'd like an Alexander Keith's echo "I'd like an {${beers::$ale}}\n"; ?> Truy xuất và sửa đổi chuỗi bằng ký tự Những ký tự trong chuỗi có thể được truy xuất và điều chỉnh bằng cách đặt thứ tự của chúng trong một cặp ngoặc vuông sau tiên biến chứa chuỗi. Hãy tưởng tượng chuỗi lúc này như một mảng để dễ hiểu. Các hàm substr() và substr_replace() có thể được dùng khi bạn muốn trích xuất nhiều hơn một ký tự.

Lưu ý: Chuỗi có thể được truy xuất bằng cách sử dụng cặp ngoặc vuông.

<?php // Get the first character of a string $str = 'This is a test.'; $first = $str[0];

// Get the third character of a string $third = $str[2];

// Get the last character of a string. $str = 'This is still a test.'; $last = $str[strlen($str)-1];

// Modify the last character of a string $str = 'Look at the sea'; $str[strlen($str)-1] = 'e';

?>

Từ phiên bản PHP 5.4, các chỉ số phải là số hoặc chuỗi dạng số, nếu không một cánh báo sẽ được đưa ra.

Sự khác nhau giữa PHP 5.3 và PHP 5.4 <?php $str = 'abc';

var_dump($str['1']); var_dump(isset($str['1']));

var_dump($str['1.0']); var_dump(isset($str['1.0']));

var_dump($str['x']); var_dump(isset($str['x']));

var_dump($str['1x']); var_dump(isset($str['1x'])); ?>

Đầu ra của PHP 5.3 string(1) "b" bool(true) string(1) "b" bool(true) string(1) "a" bool(true) string(1) "b" bool(true)

Đầu ra của PHP 5.4 string(1) "b" bool(true)

Warning: Illegal string offset '1.0' in /tmp/t.php on line 7 string(1) "b" bool(false)

Warning: Illegal string offset 'x' in /tmp/t.php on line 9 string(1) "a" bool(false) string(1) "b" bool(false)

Chuyển đổi chuỗi Một giá trị có thể được chuyển thành chuỗi bằng cách sử dụng (string) hoặc hàm strval(). Việc chuyển đổi chuỗi sẽ được tự động thực hiện khi biểu thức tính toán cần một chuỗi. Điều này xáy ra khi ta dùng hàm echo hoặc print, hay khi ta so sánh một biến với một chuỗi. Xem thêm mục Kiểu và Lừa kiểu để rõ hơn. Bạn cũng có thể xem thêm hàm settype().

Một giá trị boolean TRUE sẽ đươc chuyển thành chuỗi “1”. Giá trị boolean FALSE sẽ được chuyển thành “” (một chuỗi rỗng). Việc chuyển đổi giữa string và boolean là hợp lệ.

Các số nguyên và số thực sẽ được chuyển thành các chuỗi số.

Mảng sẽ luôn được chuyển thành chuỗi “Array”; bởi vậy nên echo và print sẽ không xem được nội dung của một mảng. Để xem một phần tử, sử dụng cấu trúc tương tự như echo $arr[‘foo’].

Đối tượng trong PHP 4 sẽ luôn được chuyển thành chuỗi Object.

Resource sẽ luôn được chuyển thành chuỗi “Resource id #1”, 1 ở đây là số resouece tạo thời điểm PHP chạy.

NULL luôn được chuyển đổi thành một chuỗi rỗng.

Như đã nói ở trên, việc chuyển trực tiếp mảng, đối tượng hoặc resource sang chuỗi sẽ không hữu ích khi muốn lấy thông tin. Tìm hiểu về các hàm print_r và var_dump để dùng hiệu quả hơn khi làm việc với nội dung của các kiểu này.

Đa số các giá trị PHP có thể chuyển đổi thành chuỗi để lưu trữ lâu dài. Việc làm như vậy được gọi là tuần tự hóa (serialization), và được thực hiện bởi hàm serialize().

Chuỗi chuyển đổi thành số Khi một chuỗi là một chuỗi số (numberic), các kết quả giá trị và kiểu được phân định như bên dưới.

Nếu một chuỗi không chứa các ký tự ‘.’, ‘e’, hoặc ‘E’ và giá trị numberic này không quá giới hạn của một số integer, chuỗi này sẽ được chuyển thành một số nguyên (integer). Các trường hợp còn lại sẽ chuyển thành một số thực (float).

Giá trị sẽ phụ thuộc vào phần đầu của chuỗi. Nếu chuỗi bắt đầu bằng một dữ liệu numeric hợp lệ, sẽ nó được dùng hợp lệ. Nếu không, giá trị sẽ là bằng 0. Một giá trị numeric hợp lệ là dấu tùy chọn, sau đó là một hoặc nhiều số (có thể chứa dấu thập phân), sau đó là dấu mũ tùy chọn. Dấu mũ này là ‘e’ hoặc ‘E’ theo sau đó mà một hoặc nhiều số.

<?php $foo = 1 + "10.5";                // $foo is float (11.5) $foo = 1 + "-1.3e3";              // $foo is float (-1299) $foo = 1 + "bob-1.3e3";           // $foo is integer (1) $foo = 1 + "bob3";                // $foo is integer (1) $foo = 1 + "10 Small Pigs";       // $foo is integer (11) $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) $foo = "10.0 pigs " + 1;          // $foo is float (11) $foo = "10.0 pigs " + 1.0;        // $foo is float (11) ?>

Share this:

  • X
  • Facebook
Like Loading...

Related

Từ khóa » Eod Php Là Gì