字符串类型| 学习笔记

简介: 快速学习字符串类型。

开发者学堂课程【PHP 基础入门课程(上) :字符串类型】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/709/detail/12594


字符串类型

 

内容简介:

一、目标

二、示例

三、小结

 

一、目标

掌握字符串的不同定义方式,以及各个方式的区别

概念

字符串:字符串是由数字、字母和下划线组成的一串字符

字符串是编程中用到最多的数据格式,有多种定义方式:

•单引号包裹:使用英文单引号’’包裹字符

•双引号包裹:使用英文双引号””包裹字符

•定界符包裹:使用 PHP 中的定界符<<<标识符+标识符结尾形式包裹(多行字符串的一种形式)

• heredoc 结构:双引号的一种多行字符串形式

•nowdoc 结构:单引号的一种多行字符串形式

 

二、示例

#单引号字符串

Sstr1='hello world';

#双引号字符串

$str2="hello world";

#定界符:heredoc:注意 EOT 并非固定,自己取名即可(但不要与关键字同名)$str3 = <<<EOT

$str1

EOT;

#输出:hello world

#定界符:nowdoc

$str4 = <<<'EOT'

$str1

EOT;

#输出:$str1

案例示范:

首先用单引号定义内容

代码如下:

<?php

# 字符串类型

#单引号定义内容

$str1 =  ‘hello world ’;

var_dump($str1);

浏览器搜索 localhost/11string.php 查看结果

结果显示:

string(11)“hello world”

11代表长度,空格此时也代表一个字符

再用双引号来定义内容,看二者有什么区别

代码如下:

#双引号定义内容

$str1 =  “hello world”;

var_dump($str1,$str2);

打开浏览器刷新界面

结果如下:

string(11)“hello world”string(11)“hello world”

对比发现二者结果没有区别

举例查看 heredoc 结构

代码如下:

#定界符:heredoc结构

$str3 = <<<END

这里都是字符串

END;

var_dump($str1,$str2,$str3); 

结果如下:

string(11)“hello world”string(11)“hello world”string(24) “这里都是字符串”

举例查看 nowdoc 结构

代码如下:

#定界符:nowdoc 结构

$str4 = <<<‘END’

这里也是字符串

END;

var_dump($str1,$str2,$str3,$str4);

结果如下:

string(11)“hello world”string(11)“hello world”string(24) “这里都是字符串”string(22) “这里也是字符串”

区别

1、单引号是最简单字符串

•里面能解析少量转义符:单引号(\’),反斜杠(\\)

代码示例如下:

$str1 = 'abcdefg\r\n\t\'\"\\$a';

echo $str1,‘<br/>’ ;

浏览器刷新查看结果

结果如下:

abcdefg\r\n\t'\"\$a

发现\'  \\被转译

双引号示例代码如下:

$str1 = 'abcdefg\r\n\t\'\"\\$a';

$str = “abcdefg\r\n\t\'\"\\$a”;

echo $str1,‘<br/>’ ;

echo $str2,‘<br/>’ ;

浏览器刷新查看结果

结果如下:

Notice:Undefined variable:a in

D:\server\Apache24\htdocs\11string.php on line 27

abcdefg\r\n\t'\"\$a

abcdefg\'”\

其中报错反应了双引号里面如果有 PHP 变量,也可以被解析

此时需要在代码前定义

$a = ‘hello world’;

再次刷新浏览器发现结果如下:

abcdefg\r\n\t'\"\$a

abcdefg\'”\hello world

也可以添加转译

$str1 = 'abcdefg\r\n\t\'\"\\$a';

$str = “abcdefg\r\n\t\'\"\\\$a”;

刷新浏览器发现结果如下:

abcdefg\r\n\t'\"\$a

abcdefg\'”\$a

#单引号解析

$a = 100;

$str = 'abcdefg\r\n\t\'\"\\$a'; #输出:abcdefg\r\n\t'\"\$a #单引号被解析’,反斜杠被解析\,其他均不解析

2、双引号相对单引号功能较多

•里面能解释较多转义符:$符号(\$) 双引号(\”) 反斜杠(\\),回车换行符(\r\n),tap 符(\t)

•里面如果有 PHP 变量,也可以被解析

#双引号解析

$a = 100;

$str="abcdefg\r\n\t\'\"\\$a"; #输出:abcdefg \’”\100

入r\n转换成换行空格,单引号不解析\',双引号解析",反斜杠解析\,$a被解析100

3、定界符中 heredoc 与双引号效果一致,nowdoc 与单引号一致

•定界符会自动保留格式:即如果内部字符串有换行之类的会自动保留

代码如下:

$str1 = 'abcdefg\r\n\t\'\"\\$a';

$str = “abcdefg\r\n\t\'\"\\$a”;

$str3 = <<<END

$str1

这里都是字符串

END;

#定界符:nowdoc 结构

$str4 = <<<‘END’

$str1

这里也是字符串

END;

echo $str3,‘<br/>’ ;

echo $str4,‘<br/>’ ;

刷新浏览器结果如下:

abcdefg\r\n\t'\"\$a 这里都是字符串

$str1 这里也是字符串

结果说明 heredoc 与双引号效果一致,nowdoc 与单引号一致

双引号解析变量时,不能识别内容是否为变量,也不知道变量在内存中是否存在

注意

1、双引号解析变量时,系统是有规矩匹配变量的

•变量名不要与其他字母或者数字保留在一起:如 "abc”系统会自动识别 abc,而不是 $a

•解决方案1:让变量与后面的内容之间有空格,如"$a bc ”系统识别 $a (此时会额外多出一个空格)。

•解决方案2:使用{}将变量独立包裹,如"{$a}bc ”系统识别 $a (建议)

代码如下

$str3 = "$a bc ”

echo $str3,‘<br/>’ ;

结果为 hello world bc

$str4 = "{$a}bc ”

结果为 hello worldbc

所以通过比较可知第二种方法保留了原有的结构不会增加额外的内容

2、使用定界符定义多行字符串时有很多规矩

•定界符内的所有内容都是字符串的内容(包括注释)

$str3 = <<<END

#这里是字符串内部

END;

echo $str3,‘<br/>’ ;

结果为 #这里是字符串内部

•定界符的起始符号之后不能有任何信息,包括空格

$str3 = <<<END #空格

#这里是字符串内部

END;

echo $str3,‘<br/>’ ;

输出结果报错

删掉#空格后结果仍报错

将 $str3 = <<<END  后的空格删除后才能正常输出

#这里是字符串内部

•定界符的结束符号必须顶格

注意

1、双引号解析变量时,系统是有规矩匹配变量的

•变量名不要与其他字母或者数字保留在一起:如“$abc" 系统会自动识别 $abc,而不是 $a

•解决方案1:让变量与后面的内容之间有空格,如“$a bc" 系统识别 $a (此时会额外多出一个空格)

•解决方案2:使用)将变量独立包裹,如 "($a)bc" 系统识别 $a (建议)

2、使用定界符定义多行字符串时有很多规矩

•定界符内的所有内容都是字符串的内容(包括注释)

•定界符的结束符号必须顶格

•定界符的结束符号后同样不能有任何信息

#错误示范1:定界符起始符号后有内容

Sstr  =  <<<EOT #这是起始

hello world

EOT;

#错误示范2:定界符结束符号不顶格

Sstr  =  <<<EOT

hello world

EOT;

#错误示范3:定界符结束符号后有内容

$str  =  <<<EOT

hello world

EOT;   #字符串结束

 

三、小结

1、字符串是程序编码中应用最多的一种类型,可以使用多种方式定义

•单引号定义

•双引号定义

•定界符定义

•heredoc 定义:代替双引号

•nowdoc 定义:代替单引号

2、单引号与双引号有区别

•单引号解析的转义符号较少:\和\\

•双引号解析的转义符号较多:\"、\\、\r\n、\t、\s

•双引号中可以解析变量,但要注意变量的规则

•让变量名与其他可能让系统误解的符号分开

•给变量名增加一个{}

3、使用定界符的时候要注意定界符的严格要求工

•起始符号后不能有任何内容(包括空格)

•结束符号必须顶格

•结束符号后不能有任何内容

相关文章
|
人工智能 自然语言处理 安全
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架【2月更文挑战第2天】
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架
|
自然语言处理 编译器 Linux
【Latex】texstudio使用和ACL论文模板初步解读
LaTeX是一类用于编辑和排版的软件,用于生成PDF文档。 LaTeX编辑和排版的核心思想在于,通过\section和\paragraph等语句,规定了每一句话在文章中所从属的层次,从而极大方便了对各个层次批量处理。 LaTeX在使用体验方
2130 0
【Latex】texstudio使用和ACL论文模板初步解读
|
8月前
|
Java API Spring
Java小抄 使用StopWatch输出执行耗时
通过本文的介绍,我们详细讲解了如何使用 `StopWatch` 类测量代码执行时间。`StopWatch` 提供了简单而强大的功能,帮助我们精确分析代码的性能瓶颈,优化程序效率。希望本文能帮助您更好地理解和应用 `StopWatch`,在实际开发中提高代码性能和质量。
1210 80
|
前端开发 JavaScript 数据库连接
掌握 JavaScript 异步编程:从回调到 Async/Await
在现代 JavaScript 开发中,异步编程是处理非阻塞操作的关键技术。本文从早期的回调函数讲起,逐步过渡到 Promise 和 ES2017 的 async/await 语法,展示了异步编程如何变得更加简洁和强大。通过实用的技巧和最佳实践,帮助开发者避免常见陷阱,提升代码效率和可靠性。
|
缓存 监控 前端开发
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(3)-再识Fiddler让你感性认识一下
【7月更文挑战第18天】Fiddler界面简要介绍:Fiddler是一个HTTP协议调试代理工具,其界面分为多个部分,包括菜单栏、工具面板、会话列表、监控面板和状态栏。
261 1
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(3)-再识Fiddler让你感性认识一下
|
前端开发 JavaScript 程序员
后端程序员的前端捷径-超级容易上手使用的前端框架layUI(上)
后端程序员的前端捷径-超级容易上手使用的前端框架layUI
314 10
|
机器学习/深度学习 人工智能 自然语言处理
|
运维 Kubernetes 数据可视化
|
Kubernetes 负载均衡 网络协议
浅入Kubernetes(8):外网访问集群
浅入Kubernetes(8):外网访问集群
2484 1
浅入Kubernetes(8):外网访问集群
|
存储 固态存储 关系型数据库
共享存储原理与实践 | 学习笔记
快速学习共享存储原理与实践
共享存储原理与实践 | 学习笔记

热门文章

最新文章