PHP的資料型別分成八種資料型,PHP字串也是其中一種,今天我們就來詳細講解一下 PHP字串。
簡介
PHP中字串的實作方式是由位元組組成的陣列再加上一個整數指明緩衝區長度。並無如何將位元組轉換成字元的訊息,這是由程式設計師來決定的。字串由什麼值來組成並無限制;特別的,其值為 0 的位元組可以處於字串任何位置。
由於 PHP 並沒有特別指明字串的編碼,那字串到底是怎麼編碼的呢?例如字串"á" 到底是等於"\xE1"(ISO-8859-1),"\xC3\xA1"(UTF-8,C form),"\x61\xCC\x81"(UTF-8,D form)還是任何其它可能的表達呢?答案是字串會被按照該腳本檔案相同的編碼方式來編碼。
字串的表示
php的字串可以用4種方式來表示,包括:
單引號/雙引號/heredoc/nowdoc
這4種方式都支援將字串寫成多行,同時,字串中的換行、空格都會原樣保留在字元中,也就是保持原始碼中的格式。如果要消除換行,可以寫成單行的形式,並使用字串拼接運算子。
單引號使用簡單,使用單引號時,轉義字元只有兩個,即\'和\\
##如果字串中包含了雙引號,則使用單引號的方式將會十分簡潔。
##同樣,雙引號表示的字串中,單引號不用進行轉義。
雙引號表示的字串還有另一個重要的特點,就是會對字串的中變數進行解析:
"Hi, $str."
語法分析器一旦碰到$符號,就會取得$符號的後面直到下一個不是英文字母、阿拉伯數字或底線的字元之間的字串,將其當成變數名稱,若程式中沒有這個變量,則會自動忽略。
如果要輸出$符號,則必須使用轉義字元\$
#heredoc語法
語法格式:
<< 字串內容 str 指定字串結束的識別碼必須是另起一行並且從第一列開始書寫。這行除了後面可能有一個分號(;)外,絕對不能包含其它字元。這意味著標識符不能縮進,分號的前後也不能有任何空白或製表符。更重要的是結束識別碼的前面必須是個被本地作業系統認可的換行,例如在UNIX 和Mac OS X 系統中是\n,而結束定界符(可能其後有個分號)之後也必須緊跟一個換行。 注意,Heredocs 包含變數解析時,不能用來初始化類別的屬性。 語法格式: <<<'str' 字串內容 字串中的變數解析#最簡單的方式是直接寫變數名,例如: 這種方式必須讓變數名的末尾有一個不能用於變數命名的字符,例如上例中的"!",當然,除非是字串已經結束。 一個例外是數組元素,數組元素使用]標識了變數的結束,所以在]之後可以有其他字母或數字。 注意: 1.$和{必須緊鄰在一起,例如:${或{$,否則花括號就會被解析為字串中的一個普通字元。 2.必須有}符號,否則出錯。 4.解析数组元素时,只有通过花括号语法才能正确解析带引号的键名 只使用一层花括号时,无法处理函数或方法的返回值或者类常量以及类静态变量。正确的做法是使用两层花括号: 下面的例子演示了字符串中的可变变量: 以数组的形式访问字符串 一个字符串可以当成一个可读写的数组进行访问,这时,数组的键固定为0、1、2... 可以使用方括号或花括号来访问字符串中的元素: 注意,用超出字符串长度的下标写入将会拉长该字符串并以空格填充。非整数类型下标会被转换成整数。非法下标类型会产生一个 E_NOTICE 级别错误。用负数下标写入字符串时会产生一个 E_NOTICE 级别错误,用负数下标读取字符串时返回空字符串。写入时只用到了赋值字符串的第一个字符。用空字符串赋值则赋给的值是 NULL 字符。 运算符 字符串支持以下这些运算符: . .= 该运算符用于连接两个字符串: 字符串函数 strlen(str) 返回字符串的长度 以上就是本文的所有内容,希望可以给你带来对字符串的新认识哦~ 相关推荐: 以上是php中的字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!
注意,上面的str是一個自訂的識別碼(可以添加雙引號),用於輔助標誌字串的開始和結束。另外,<<
heredoc語法與雙引號表示法一樣會解析字串中的變數。
nowdoc語法
str
nowdoc語法與heredoc語法類似,特點是識別碼必須由單引號包圍。而且nowdoc語法不會對字串中的變數進行解析。 <?php
$name = "pish";
echo <<<'str1'
My name is $name.<br>
str1;
?>
$name = 'Ann';
$str = "hello $name!";
如果變數名稱後面跟著的是字母或數字,那麼變數就不會得到正確的解析,因為語法分析器一旦碰到$符號,就會取得$符號的後面直到下一個不是英文字母、阿拉伯數字或底線的字元之間的字串,將其當成變數名稱,若程式中沒有這個變量,則會自動忽略。
如果想要更好的控制變數名稱或使用一個複雜的表達式,則可以使用{}來輔助識別。
3.如果$符號是挨著變數名的,則它們之間不能有空格。 $str = "hello ${name}";
$str = "hello ${ name }";
$str = "hello {$name }";
$str = "hello {$ name }"; // 出错
{${getName()}} // 函数
{${$object->getName()}} // 方法
{${beers::softdrink}} // 类常量
{${beers::$ale}} // 类变量
$name = 'Ann';
$Ann = 'Jeck';
echo "hello {${$name}}"; // hello Jeck
echo "hello ${$name}"; // hello Jeck
class foo {
var $bar = 'I am bar.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo "{$foo->$bar}\n"; // I am bar.
echo "{$foo->{$baz[1]}}\n"; // I am bar.
$str = "abcdefg";
$str[0] = "2";
$str{1} = 3;
echo var_dump($str); // string(7) "23cdefg"
PHP 的字符串在内部是字节组成的数组。因此用花括号访问或修改字符串对多字节字符集很不安全。仅应对单字节编码例如 ISO-8859-1 的字符串进行此类操作。$str1 = "hello " . "world";
$str1 .= "!";
echo $str1; // hello world!
$str1 = "abcdefg";
$str2 = "大家好!";
echo strlen($str1); // 7
echo strlen($str2); // 10