PHPの文字列

韦小宝
リリース: 2023-03-17 17:24:01
オリジナル
3191 人が閲覧しました

PHPデータ型は8つのデータ型に分かれており、PHPstringもそのうちの1つです。今日はPHPstringについて詳しく説明します。

はじめに

PHP での文字列の実装は、バイトの配列とバッファーの長さを示す整数です。バイトを文字に変換する方法については情報がなく、プログラマに委ねられています。文字列がどのような値で構成されるかについては制限はありません。特に、値 0 のバイトは文字列内のどこにでも存在できます。
PHP では文字列のエンコードが指定されていないため、文字列はどのようにエンコードされるのでしょうか?たとえば、文字列 "á" は、"xE1" (ISO-8859-1)、"xC3xA1" (UTF-8、C 形式)、"x61xCCx81" (UTF-8、D 形式)、またはその他の可能な式に等しいですか? ? ?答えは、文字列がスクリプト ファイルと同じエンコードでエンコードされるということです。

文字列の表現

PHP 文字列は、次の 4 つの方法で表現できます。

一重引用符/二重引用符/heredoc/nowdoc

これら 4 つの方法はすべて、複数行への文字列の書き込みを同時にサポートします。の場合、文字列内の改行とスペースは文字内にそのまま保持されます。つまり、ソース コード内の形式が維持されます。改行をなくしたい場合は、単一行で記述し、文字列連結演算子を使用します。


一重引用符を使用する場合、エスケープ文字は ' と \

の 2 つだけです。文字列に二重引用符が含まれている場合、一重引用符の使用方法は非常に簡潔になります。


二重引用符は、n や t などのより多くのエスケープ文字をサポートします。さらに、エスケープ文字は 8 進表記、16 進表記、UTF-8 表記もサポートしています:

[0-7]{1,3}

x[0-9A-Fa-f]{1 ,2}

u {[0-9A-Fa-f]+}


同様に、二重引用符で表される文字列では、一重引用符をエスケープする必要はありません。

二重引用符で表される文字列には、文字列内の変数を解析するという別の重要な機能があります:

"Hi, $str."
ログイン後にコピー

構文アナライザーが $ 記号を検出すると、次の $ 記号が取得されるまで、次の $ 記号が取得されます。英字以外の文字、アラビア数字、アンダースコアの間は変数名として扱われ、プログラム中にそのような変数が存在しない場合は自動的に無視されます。

$ 記号を出力したい場合は、エスケープ文字 $


ヒアドキュメント構文を使用する必要があります

構文形式:

<<

文字列コンテンツ

str


上記の str はカスタム識別子 (二重引用符を追加できます) であり、文字列の先頭と末尾をマークするのに使用されることに注意してください。さらに、<<

文字列の末尾を指定する識別子は、新しい行に最初の列から記述しなければなりません。この行には、その後のセミコロン (;) を除き、他の文字を含めることはできません。これは、識別子をインデントしたり、セミコロンの前後に空白やタブを入れたりすることはできないことを意味します。さらに重要なのは、終了識別子の前にローカル オペレーティング システムで認識される改行 (UNIX および Mac OS X システムの n など) がなければならず、終了区切り文字 (セミコロンが後に続く場合もあります) も A 改行の後に続く必要があります。

ヒアドキュメント構文は、二重引用符表記と同じように文字列内の変数を解析します。

ヒアドキュメントに変数解決が含まれている場合、クラス属性の初期化には使用できないことに注意してください。


nowdoc構文

文法形式:

<<<'str'

String content

str


nowdoc構文はヒアドキュメント構文に似ています税金の特徴は、識別子であることです。一重引用符で囲む必要があります。また、nowdoc 構文は文字列内の変数を解析しません。

<?php  
  $name = "pish";  
  echo <<<&#39;str1&#39;  
My name is $name.<br>  
str1;  
?>
ログイン後にコピー

文字列内の変数解析

最も簡単な方法は、変数名を直接記述することです。例:

$name = &#39;Ann&#39;;  
$str = "hello $name!";
ログイン後にコピー

このメソッドは、変数名の末尾に変数の名前付けに使用できない文字を含める必要があります。 、上記の例の「!」など、もちろん文字列が終了している場合を除きます。


変数名の後に文字または数字が続く場合、変数は正しく解析されません。これは、パーサーが $ 記号に遭遇すると、次の $ 記号が英語でなくなるまで次の $ 記号を取得するためです。アラビア数字またはアンダースコア文字で囲まれた文字列は、プログラム内にそのような変数が存在しない場合、自動的に無視されます。

1 つの例外は配列要素で、変数の終わりを識別するために ] を使用するため、] の後に他の文字や数字が存在する可能性があります。


変数名をより適切に制御したい場合、または複雑な式を使用したい場合は、識別しやすくするために {} を使用できます。

注:

1.$ と { は、${ または {$ のように近くにある必要があります。そうしないと、中括弧は文字列内の通常の文字として解析されます。

2. } 記号がなければエラーが発生します。

3. $ 記号が変数名の隣にある場合、それらの間にスペースを入れてはいけません。

4.解析数组元素时,只有通过花括号语法才能正确解析带引号的键名

$str = "hello ${name}";  
$str = "hello ${  name  }";  
$str = "hello {$name  }";  
$str = "hello {$  name  }";  // 出错
ログイン後にコピー

只使用一层花括号时,无法处理函数或方法的返回值或者类常量以及类静态变量。正确的做法是使用两层花括号:

{${getName()}}            // 函数  
{${$object->getName()}}   // 方法  
{${beers::softdrink}}     // 类常量  
{${beers::$ale}}          // 类变量
ログイン後にコピー

下面的例子演示了字符串中的可变变量

$name = &#39;Ann&#39;;  
$Ann = &#39;Jeck&#39;;  
echo "hello {${$name}}"; // hello Jeck  
echo "hello ${$name}";   // hello Jeck  
  
class foo {  
  var $bar = &#39;I am bar.&#39;;  
}  
$foo = new foo();  
$bar = &#39;bar&#39;;  
$baz = array(&#39;foo&#39;, &#39;bar&#39;, &#39;baz&#39;, &#39;quux&#39;);  
echo "{$foo->$bar}\n";          // I am bar.  
echo "{$foo->{$baz[1]}}\n";     // I am bar.
ログイン後にコピー

以数组的形式访问字符串

一个字符串可以当成一个可读写的数组进行访问,这时,数组的键固定为0、1、2...

可以使用方括号或花括号来访问字符串中的元素:

$str = "abcdefg";  
$str[0] = "2";  
$str{1} = 3;  
echo var_dump($str);  // string(7) "23cdefg"
ログイン後にコピー

注意,用超出字符串长度的下标写入将会拉长该字符串并以空格填充。非整数类型下标会被转换成整数。非法下标类型会产生一个 E_NOTICE 级别错误。用负数下标写入字符串时会产生一个 E_NOTICE 级别错误,用负数下标读取字符串时返回空字符串。写入时只用到了赋值字符串的第一个字符。用空字符串赋值则赋给的值是 NULL 字符。
PHP 的字符串在内部是字节组成的数组。因此用花括号访问或修改字符串对多字节字符集很不安全。仅应对单字节编码例如 ISO-8859-1 的字符串进行此类操作。

运算符

字符串支持以下这些运算符:

. .=

该运算符用于连接两个字符串:

$str1 = "hello " . "world";  
$str1 .= "!";  
echo $str1;     // hello world!
ログイン後にコピー

字符串函数

strlen(str)

返回字符串的长度

$str1 = "abcdefg";  
$str2 = "大家好!";  
echo strlen($str1); // 7  
echo strlen($str2); // 10
ログイン後にコピー

以上就是本文的所有内容,希望可以给你带来对字符串的新认识哦~

相关推荐:

最全的php字符串处理函数

php字符串转换为小写的函数strtolower()

几个被人遗忘的PHP字符串处理函数

以上がPHPの文字列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート