PHP의 문자열

韦小宝
韦小宝원래의
2017-12-01 10:06:033193검색

PHP데이터 유형은 8가지 데이터 유형으로 나뉘는데, PHP문자열도 그중 하나입니다. 오늘은 PHP문자열에 대해 자세히 설명하겠습니다.

소개

PHP에서 문자열의 구현은 바이트 배열과 버퍼 길이를 나타내는 정수로 구성됩니다. 바이트를 문자로 변환하는 방법에 대한 정보는 프로그래머에게 달려 있습니다. 특히 문자열이 어떤 값으로 구성되는지에 대한 제한은 없습니다. 값이 0인 바이트는 문자열의 어느 곳에나 있을 수 있습니다.
PHP는 문자열 인코딩을 지정하지 않으므로 문자열은 어떻게 인코딩되나요? 예를 들어 문자열 "á"는 "xE1"(ISO-8859-1), "xC3xA1"(UTF-8, C 형식), "x61xCCx81"(UTF-8, D 형식) 또는 기타 가능한 표현식과 동일합니까? ? 대답은 문자열이 스크립트 파일과 동일한 인코딩으로 인코딩된다는 것입니다.

문자열 표현

PHP 문자열은 다음을 포함한 4가지 방법으로 표현할 수 있습니다.

작은따옴표/큰따옴표/heredoc/nowdoc

이 4가지 방법은 동시에 여러 줄에 문자열을 쓰는 것을 지원합니다. 문자열의 개행 및 공백은 문자에 그대로 유지됩니다. 즉, 소스 코드의 형식이 유지됩니다. 줄 바꿈을 제거하려면 한 줄로 작성하고 문자열 연결 연산자를 사용할 수 있습니다.


작은따옴표는 사용하기 쉽습니다. 작은따옴표를 사용할 때 이스케이프 문자는 '와 \

두 개뿐입니다. 문자열에 큰따옴표가 포함되어 있으면 작은따옴표를 사용하는 방법이 매우 간결해집니다.


큰따옴표는 n 및 t와 같은 더 많은 이스케이프 문자를 지원합니다. 또한 이스케이프 문자는 8진수 표기법, 16진수 표기법 및 UTF-8 표기법도 지원합니다.

[0-7]{1,3}

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

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


마찬가지로 큰따옴표로 표시된 문자열에서는 작은따옴표를 이스케이프할 필요가 없습니다.

큰따옴표로 표시되는 문자열에는 문자열의 변수를 구문 분석한다는 또 다른 중요한 기능이 있습니다.

"Hi, $str."

구문 분석기가 $ 기호를 발견하면 다음 기호까지 다음 $ 기호를 얻습니다. 영문자가 아닌 문자 사이, 아라비아 숫자, 밑줄 등은 변수명으로 처리됩니다. 프로그램에 해당 변수가 없으면 자동으로 무시됩니다.

$ 기호를 출력하려면 이스케이프 문자 $


heredoc 구문

구문 형식:

<<

문자열 콘텐츠

str


위의 문자열은 문자열의 시작과 끝을 표시하는 데 도움이 되는 사용자 지정 식별자(큰따옴표 추가 가능)입니다. 또한 <

문자열의 끝을 지정하는 식별자는 첫 번째 열부터 새 줄에 작성해야 합니다. 이 줄 뒤에는 세미콜론(;)을 제외한 다른 문자가 포함되어서는 안 됩니다. 이는 식별자를 들여쓰기할 수 없으며 세미콜론 앞이나 뒤에 공백이나 탭이 있을 수 없음을 의미합니다. 더 중요한 것은 종료 식별자 앞에는 UNIX 및 Mac OS X 시스템의 n과 같이 로컬 운영 체제에서 인식되는 개행 문자가 와야 하며, 끝 구분 기호(뒤에 세미콜론이 올 수 있음)도 개행 문자 뒤에 와야 한다는 것입니다.

heredoc 구문은 큰따옴표 표기법과 동일하게 문자열의 변수를 구문 분석합니다.

Heredocs에 가변 해상도가 포함되어 있으면 클래스 속성을 초기화하는 데 사용할 수 없습니다.


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.$ 및 {는 ${ 또는 {$와 같이 서로 가까워야 합니다. 그렇지 않으면 중괄호가 문자열의 일반 문자로 구문 분석됩니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.