PHP经验分享PHP

关于PHP的数据类型(二)

2018-09-25  本文已影响2人  Monkey_zhou
php数据类型-字符串

string (字符串):
一个字符串由一系列的字符组成,其中每个字符等同于一个字节。这意味着PHP只能支持 256 的字符集,因此不支持 Unicode;

string 类型最大可以达到 2GB;

字符串的三种表达方式:

  • 单引号
  • 双引号
  • heredocnowdoc
  1. 单引号:定义一个字符串的最简单的方法是用单引号把他包围起来(字符);
  1. 双引号:定义一个字符串也可以使用双引号将它包围起来(字符);

效率:单引号的效率要高于双引号;

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

example1.php

//单引号实例
<?php
echo '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 newline
echo 'This will not expand: \n a newline';

// 输出: Variables do not $expand $either
echo '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;
?>
  1. heredocnowdoc:
    表达字符串的方法是用 heredoc 句法结构:<<< 在该运算符之后要提供一个标识符,然后换行。 接下来是字符串本身,最后要用前面定义的标识符作为结束标志。 结束时所引用的标识符 必须 在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头;

注意:要注意的是结束标识符这行除了可能有一个分号(;)外,绝对不能包含其它字符;

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

example3.php

<?php
$str = <<<EOD
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 <<<EOT
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

<?php
var_dump(array(<<<EOD
foobar!
EOD
));
?>
<?php
// 静态变量
function foo()
{
    static $bar = <<<LABEL
Nothing in here...
LABEL;
}

// 类的常量、属性
class foo
{
    const BAR = <<<FOOBAR
Constant example
FOOBAR;

    public $baz = <<<FOOBAR
Property example
FOOBAR;
}
?>
<?php
echo <<<"FOOBAR"
Hello World!
FOOBAR;
?>

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

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 <<<'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': \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': \x41

<?php
class foo {
    public $bar = <<<'EOT'
bar
EOT;
}
?>

当字符串用 双引号heredoc 结构定义时,其中的变量将会被解析。

string 中的字符可以通过一个从 0 开始的下标,用类似 array 结构中的方括号包含对应的数字来访问和修改,比如 $str[42]。可以把 string 当成字符组成的 array;也可用 花括号 访问,比如 $str{42}

注意

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

转换成字符串:

一个值可以通过在其前面加上 (string) 或者使用 strval() 函数来转变成字符串;

  • 一个布尔值 booleanTRUE 被转换成 string"1"BooleanFALSE 被转换成 ""(空字符串)。这种转换可以在 booleanstring 之间相互进行。
  • 一个整数 integer 或浮点数 float 被转换为数字的字面样式的 string(包括 float 中的指数部分)。使用指数计数法的浮点数(4.1E+6)也可转换。
  • 数组 array 总是转换成字符串 "Array",因此,echoprint 无法显示出该数组的内容。要显示某个单元,可以用 echo $arr['foo'] 这种结构。
  • 对象 object 总是被转换成字符串 "Object"
  • 资源 resource 总会被转变成 "Resource id #1"这种结构的字符串,其中的 1 是 PHP 在运行时分配给该 resource 的唯一值。
  • NULL 总是被转变成 空字符串

直接把 arrayobjectresource 转换成 string 不会得到除了其类型之外的任何有用信息。可以使用函数 print_r()var_dump() 列出这些类型的内容。

大部分的 PHP 值可以转变成 string 来永久保存,这被称作串行化,可以用函数 serialize() 来实现。如果 PHP 引擎设定支持 WDDX,PHP 值也可被串行化为格式良好的 XML 文本。

上一篇 下一篇

猜你喜欢

热点阅读