php foo(),关于PHP的数据类型(二)

AAffA0nNPuCLAAAAAElFTkSuQmCC

php数据类型-字符串

④ string (字符串):

一个字符串由一系列的字符组成,其中每个字符等同于一个字节。这意味着PHP只能支持 256 的字符集,因此不支持 Unicode;string 类型最大可以达到 2GB;字符串的三种表达方式:单引号

双引号

heredoc 和 nowdoc单引号:定义一个字符串的最简单的方法是用单引号把他包围起来(字符);单引号不能解析变量;

单引号只能解析单引号和反斜线本身;

变量与变量,变量与字符串之间,字符串与字符串之间使用 . 来连接;双引号:定义一个字符串也可以使用双引号将它包围起来(字符);双引号可以解析变量,变量可以使用特殊字符和 {} 包含;

双引号可以解析所有的转移字符;

变量与变量,变量与字符串之间,字符串与字符串之间使用 . 来连接;

效率:单引号的效率要高于双引号;双引号里的变量会经过编译器解释,然后在输出,单引号直接输出;

example1.php//单引号实例<?phpecho  'this is a simple string';// 可以录入多行echo 'You can also have embedded newlines in

strings this way as it is

okay to do';// 输出: Arnold once said: "I'll be back"echo 'Arnold once said: "I\'ll be back"';// 输出: You deleted C:\*.*?echo 'You deleted C:\\*.*?';// 输出: You deleted C:\*.*?echo 'You deleted C:\*.*?';// 输出: This will not expand: \n a newlineecho 'This will not expand: \n a newline';// 输出: Variables do not $expand $eitherecho 'Variables do not $expand $either';?>

example2.php<?php //双引号实例$a = 123;

$str = "abcd{$a}efg";  //双引号可以解析变量,使用 {} 将变量括起来。 {} 不会输出;$str1 = 'abcd@$a@efg'; //可以使用特殊字符将变量括起来,但是特殊字符会输出  abcd@123@efg$str2 = "abcd'$a'efg"; // 双引号中有单引号,此种情况变量可以被解析,同时单引号也会输出  abcd'123'efg;?>heredoc 和 nowdoc:

表达字符串的方法是用 heredoc 句法结构:<<< 在该运算符之后要提供一个标识符,然后换行。 接下来是字符串本身,最后要用前面定义的标识符作为结束标志。 结束时所引用的标识符 必须 在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头;注意:要注意的是结束标识符这行除了可能有一个分号(;)外,绝对不能包含其它字符;

heredoc  类似于 双引号,字符串中 可以 解析变量,但是 不可以 转移字符;(就像没有使用双引号"" 的双引号字符串)

example3.php<?php $str = <<

Example of string

spanning multiple lines

using heredoc syntax.

EOD;/* 含有变量的更复杂示例 */class foo{    var $foo;    var $bar;    function foo()

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

}

}

$foo = new foo();

$name = 'MyName';echo <<

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;?>以上会输出:

My name is "MyName". I am printing some Foo.

Now, I am printing some Bar2.

This should print a capital 'A': A可以把 heredoc 结构用在函数参数中来传递数据:<?phpvar_dump (array(<<

foobar!

EOD));?>可以用 heredoc 结构来初始化静态变量和类属性和常量:<?php // 静态变量function foo(){    static $bar = <<

Nothing in here...

LABEL;}// 类的常量、属性class foo{    const BAR = <<

Constant example

FOOBAR;

public $baz = <<

Property example

FOOBAR;}?>可以在 heredoc 结构中使用双引号来声明标识符:<?phpecho  <<<"FOOBAR"

Hello World!

FOOBAR;?>

Nowdoc 结构:

Nowdoc 结构是类似于单引号字符串的。但是 nowdoc 中不进行解析操作;这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义;一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<

example4.php<?php $str = <<<'EOD'

Example of string

spanning multiple lines

using nowdoc syntax.

EOD;/* 含有变量的更复杂的示例 */class foo{    public $foo;    public $bar;    function foo()

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

}

}

$foo = new foo();

$name = 'MyName';echo <<

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;?>以上会输出:

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': \x41nowdoc 结构可以用在任意的静态数据环境中,最典型的示例是用来初始化类的属性或常量;<?phpclass  foo {    public $bar = <<<'EOT'

barEOT;

}?>变量解析:当字符串用 双引号 或 heredoc  结构定义时,其中的变量将会被解析。存取和修改字符串中的字符:string 中的字符可以通过一个从 0 开始的下标,用类似 array 结构中的方括号包含对应的数字来访问和修改,比如 $str[42]。可以把 string 当成字符组成的 array;也可用 花括号 访问,比如 $str{42}

注意:用 超出 字符串长度的下标写入将会 拉长该字符串 并 以空格 填充。

非整数 类型下标会被 转换成整数。

非法下标 类型会产生一个 E_NOTICE 级别错误。

用 负数下标 写入字符串时会产生一个 E_NOTICE 级别错误,用 负数下标读取 字符串时返回 空字符串。

写入 时只用到了赋值字符串的 第一个 字符。

用 空字符串赋值 则赋给的值是 NULL 字符。

字符串 在内部是字节组成的数组。 因此用花括号访问或修改字符串对多字节字符集很 不安全 。仅应对单字节编码例如 ISO-8859-1 的字符串进行此类操作。

example5.php<?php // 取得字符串的第一个字符$str = 'This is a test.';

$first = $str[0];// 取得字符串的第三个字符$third = $str[2];// 取得字符串的最后一个字符$str = 'This is still a test.';

$last = $str[strlen($str)-1];

// 修改字符串的最后一个字符$str = 'Look at the sea';

$str[strlen($str)-1] = 'e';?>字符串下标 必须为整数 或 可转换为整数的字符串,否则会发出 警告。之前类似 "foo" 的下标会无声地转换成 0。

作者:Monkey_zhou

链接:https://www.jianshu.com/p/0db8b27b4ccb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值