澳门皇冠金沙网站-澳门皇冠844网站

热门关键词: 澳门皇冠金沙网站,澳门皇冠844网站

php数字类型之字符串类型详解,数据类型之字符

PHP中一个字符串可以通过下面的4种方式来定义:

PHP中一个字符串可以通过下面的4种方式来定义:

PHP支持8种基本的数据类型

四种标量类型:
boolean(布尔型)
nteger(整型)
float(浮点型,也叫double)
string(字符串)

两种复合类型:
array(数组)
object(对象)

最后是两种特殊类型:
resource(资源)
NULL(NULL)

为了确保代码的易读性, 本手册还介绍了一些伪类型:
mixed
number
callback
以及伪变量$......
可能还会读到一些关于“双精度(double)”类型的参考。实际上double和float是相同的,由于一些历史的原因,这两个名称同时存在。
变量的类型通常不是由程序猿设定的,确切的说,是由PHP根据该变量使用的上下文在运行时决定的。

note:如果想查看某个表达式的值和类型,用var_dump()。
如果只是想得到一个易读懂的类型的表达方式用于调试,用gettype()。要查看某个类型,不要用 gettype(),而用is_type函数。以下是一些范例:
<?php
$a_bool = TRUE;
$a_str = "foo";
$a_str2 = "foo";
$an_int = 12;

echo gettype($a_bool); //prints out: boolean
echo gettype($a_str);  //prints out: string

// If this is an integer, increment it by four
if (is_int($an_int)){
  $an_int  = 4;
}
// If $bool is a string, print it out
// (does not print out anything)
if (is_string($a_bool)){
    echo "String: $a_bool";
}
?>

如果要将一个变量强制转换为某类型,可以对其使用强制转换或者settype()函数。

  • 单引号
  • 双引号
  • heredoc 语法结构

  • nowdoc 语法结构 (自PHP 5.3.0以后)

单引号
双引号
heredoc 语法结构
nowdoc 语法结构 (自PHP 5.3.0以后)
单引号
定义一个字符串 的最简单的方法是用单引号把它包围起来 (标点符号 ')。

PHP 布尔类型

这是最简单的类型。boolean表达了真值,可以为TRUE或FALSE。

NOTE:布尔类型是 PHP 4 引进的。

单引号

定义一个字符串 的最简单的方法是用单引号把它包围起来 (标点符号 ')。

如果想要输出一个单引号,需在它的前面加个反斜线 ()。在单引号前或在字符串的结尾处 想要输出反斜线,输入两条 (\)。注意,如果在任何其它的字符前加了反斜线,反斜线将会被直接输出。

Note: 不像双引号 和heredoc语法结构, 在单引号字符串中的变量 和特殊含义的字符将不会被替换。

如果字符串是包围在双引号(")中, PHP将对一些转义字符进行解析,和单引号字符串一样, 如果输出转义字符之外的字符,反斜线会被打印出来。 PHP5.1.1以前,{$var} 中的反斜线还不会被显示出来。

用双引号定义的 字符串最重要的特征是变量会被执行。

如果想要输出一个单引号,需在它的前面加个反斜线 ()。在单引号前或在字符串的结尾处 想要输出反斜线,输入两条 ()。注意,如果在任何其它的字符前加了反斜线,反斜线将会被直接输出。

语法

要指定一个布尔值,使用关键字TRUE或FALSE。两个都不区分大小写。

<?php
   $foo = True;
?>
通常你用某些运算符返回boolean值,并将其传递给控制流程。
<?php
    // = 是一个操作符,它检测两个变量是否相等,并返回一个布尔值
    if($action = "show_version"){
      echo "The version is 1.23";
}
  //这样做是不必要的...
    if($show_separators == TRUE){
      echo "<hr>";
  }
//...因为可以使用下面这种简单的方式:
if($show_separators){
  echo "<hr>";
}
?>

Heredoc结构

第三种定义字符串的方法是用heredoc句法结构:<<<。在该提示 符后面,要定义个标识符,然后是一个新行。接下来是字符串本身,最后要用前面定义的标识符作为结束标志。

结束时所引用的标识符必须在一行的开始位置, 而且,标识符的命名也要像其它标签一样遵守PHP的规则:只能包含 字母、数字和下划线,并且不能用数字和下划线作为开头。

Warning要注意的是结束标识符这行除了 可能有一个分号(;)外,绝对不能包括 其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或tabs。更重要的是结束标识符的前面必须是个被本地 操作系统认可的新行标签,比如在UNIX和Mac OS X系统中是n ,而结束标识符(可能有个分号)的后面也必须跟个 新行标签。

如果不遵守该规则导致结束标签不“干净”,PHP将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP将会在最后一 行产生一个句法错误。

Heredoc结构就象是没有使用双引号的双引号字符串, 这就是说在heredoc结构中引号不用被替换,但是上文中列出的字符 (n等)也可使用。 变量将被替换,但在heredoc结构中字符串表达复杂变量时,要格外小心。

Note: 不像双引号 和heredoc语法结构, 在单引号字符串中的变量 和特殊含义的字符将不会被替换。

转换为布尔值

要明确的将一个值转换成boolean,用(bool)或者(boolean)来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个boolean参数时,该值会被自动转换。

当转换为boolean时,以下值被认为是FALSE:
the布尔值FALSE自身
the整型值0(零)
the浮点型值0.0(零)
空字符串,以及字符串"0"
不包括任何元素的数组
不包括任何成员变量的对象(仅PHP4.0适用)
特殊类型NULL(包括尚未设定的变量)
从没有任何标记(tags)的XML文档生成的SimpleXML对象
所有其他值都被认为是TRUE(包括任何资源)。

Nowdoc结构

就象heredoc结构类似于双引号字符串,Nowdoc结构是类似于单引号字符串的。Nowdoc结构很象heredoc结构,但是 nowdoc不进行解析操作 。 这种结构很适合用在不需要进行转义的PHP代码和其它大段文本。与SGML的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本类似,nowdoc结构也有相同的特征。

一个nowdoc结构也用和heredocs结构一样的标记 <<<, 但是跟在后面的标志符要用 单引号括起来,就像<<<'EOT'这样。heredocs结构的所有规则也同样适用于nowdoc结 构,尤其是结束标志符的规则。

如果字符串是包围在双引号(")中, PHP将对一些转义字符进行解析,和单引号字符串一样, 如果输出转义字符之外的字符,反斜线会被打印出来。 PHP5.1.1以前,{$var} 中的反斜线还不会被显示出来。

Warning

-1和其他非零值(不论正负)一样,被认为是TRUE!

变量解析

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

这里共有两种语法规则:一种简单 规则,一种复杂规 则。简单的句法规则是最常用和最方便的, 它可以用最少的代码在一个字符串中加入变量, 数组 值,或 对象属性。

复杂的句法规则是在PHP4以后加入的,被花括号包围的表达式是其明显标记。

用双引号定义的 字符串最重要的特征是变量会被执行。

PHP整型

简单句法规则

当PHP解析器遇到一个美元符号 ($) , 它会和其它很多解析器一样,去尽量形成一个合法的变量名。可以用花括 号来明确变量名的界线。

 

如果想要表达更复杂的结构,请用复杂句法规则。

 

Heredoc结构
第三种定义字符串的方法是用heredoc句法结构:<<<。在该提示 符后面,要定义个标识符,然后是一个新行。接下来是字符串本身,最后要用前面定义的标识符作为结束标志。

语法

整型值可以使用十进制,十六进制或八进制表示,前面可以加上可选的符号(-或者 )。
八进制表示数字前必须加上0(零),十六进制表示数字前必须加上0x。

复杂句法规则

 

复杂句法规则不是结构复杂而命名,而是因为它可以使用复杂的表达式。

任何想用在字符串中标量变量,数组变量或对象属性都可使用这种方法。 只需简单地像在字符串以外的地方那样写出表达式, 然后用花括号{}把它括起来。 由于 { 无法被转义,只有 $ 要紧挨着 {才会被认出来,可以用 {$ 来表达 {$

 

结束时所引用的标识符必须在一行的开始位置, 而且,标识符的命名也要像其它标签一样遵守PHP的规则:只能包含 字母、数字和下划线,并且不能用数字和下划线作为开头。

Example #1 整数文字表达

<?php
$a = 1234; //十进制数
$a = -123; //负数
$a = 0123; //八进制数
$a = 0x1A; //十六进制数
?>

存取和修改字符串中的字符

 

字符串中的字符可以通过一个以0为开始的,用类似数组结构中的方括号包含对应的数字来查找和修改,比如 $str[42], 可以把 字符串想像数组 。 函数 substr() 和 substr_replace()可以用来实现多于一个字符 的情况。

 

Warning方括号中的数字超出范围将会产生空白。非整数类型被转换成整数,非整数类型转变成整数,非法类型会产生一个 E_NOTICE级别错误,负数在写入时会产生一个E_NOTICE,但读 取的是空字符串。被指定的字符串只有第一个字符可用,空字符串用指定为空字节。

 

Warning要注意的是结束标识符这行除了 可能有一个分号(;)外,绝对不能包括 其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或tabs。更重要的是结束标识符的前面必须是个被本地 操作系统认可的新行标签,比如在UNIX和Mac OS X系统中是n ,而结束标识符(可能有个分号)的后面也必须跟个 新行标签。

整数溢出

如果给定的一个数超出了integer的范围,将会解释为float。同样如果执行的运算结果超出了integer范围,也会返回float。

<?php
    $large_number = 2147483647;
     var_dump($large_number);
     //输出为:int(2147483647)

     $large_number = 2147483648;
     var_dump($large_number);
     //输出为:float(2147483648)

    //同样也适用于十六进制表示的整数:从 2^31 到 2^32-1:
    var_dump(0xffffffff);
    //输出float(4294967295)

     //不适用于大于2^32-1 的十六进制表示的数:
     var_dump(0x100000000);
     //输出:int(2147483647)

      $million = 1000000;
      $large_number =  50000 * $million;
      var_dump($large_number);
      // 输出: float(50000000000)
?>

有用的函数和操作符

字符串可以用'.' (点) 操作符连接起来, 注意 ' ' (加号) 操作符没有 这个功能。 

对于字符串的操作有很多有用的函数。

可以参考 字符串函数 了解大部分函数, 高级的查找&替换功能可以参考 正则表达式函数 或 Perl类型的正则 表达式函数。

另外还有URL字符串的函数, 也有加密/解密字符串的函数。 (mcrypt 和 mhash).

最后,可以参考 字符类型函数。

 

如果不遵守该规则导致结束标签不“干净”,PHP将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP将会在最后一 行产生一个句法错误。

转换为整型

要明确的将一个值转换为integer,用(int)或(integer)强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个integer参数时,值会自动转换。还可以通过函数intval()来将一个值转换成整型。

转换成字符串

 

一个值可以通过在其前面加上(string)或用strval()函数来转变成 字符串。 在一个需要字符串的表达式中,字符串会自动转变,比如在使用函数 echo 或 print 时, 或在一个变量和一个 字符串 进行比较时,就会发生这种转变 类型 和 类型转换 可以更好的解释下面的事情,也可参考函 数 settype() 。

 

一个boolean TRUE 值被转换成 字符串"1"。 Boolean FALSE 被转换成"" (空的字符串)。 这种转变可以在 boolean 和 字符串 之间往返进行。

 

一个 整数 或 浮点数 被转变为数字的字面样式的字符串 (包括 浮点数中的指数部分),使用指数计数法的浮点数 (4.1E 6)也可转变。

数组转换成 字符串 "Array",因此, echo 和 print c无法显示出该数组的值。如果显示一个数组值,可以用 echo $arr['foo']这种结构,更多内容见下文。

在PHP 4中对象被转换成 字符串 "Object", 为了调试原因需要打印出对象的值,方法见正文。为了得到对象的类的名称,可以用 get_class() 函数。 在PHP5中, 可以用 __toString 。

资源总会被转变成"Resource id #1"这种结构的字符串 , 其中的 1 是PHP分配给该资源的独特数字。不用过多关注这种结构,它马上要转变了。为了得到一个 resource类型,可以用函数 get_resource_type()。

NULL 总是被转变成空的字符串。

如上面所说的,直接把数组, 对象或 资源 转换成 字符串 不会得到超出其自身的更多信息。可以使用函数 print_r() 和 var_dump() 列出这些类型的内容。

大部分的PHP值可以转变成 字符串s 来长期储存,这被称作串行化,可以用函数 serialize() 来实现。 如果PHP引擎设定支持 WDDX , PHP值也可储存成XML格式。

Heredoc结构就象是没有使用双引号的双引号字符串, 这就是说在heredoc结构中引号不用被替换,但是上文中列出的字符 (n等)也可使用。 变量将被替换,但在heredoc结构中字符串表达复杂变量时,要格外小心。

从布尔值转换

FALSE将产生出0(零), TRUE将产生出1(一)

字符串转变成数字

当一个字符串被用在了一个数字的环境中,结果和类型如下:

如果字符串没有包含 '.','e'或'E' 并且数字值符合整数类型的限定 ( PHP_INT_MAX定义的), 这个 字符串 可被认定是一个 integer, 在其它情况下被认定为一个float。

字符串的开始部分给定了它的值,如果 字符串 以合法的数字开始,这个数字可直接使用。 否则,值就是 0 (零)。 合法数值由符号,后面跟着一个或多个数字(可能有个小数点),再跟着可选的指数符号如'e' 或 'E',后面跟着一个或多个数字。

不要想像在C语言中的那样,通过一个整数转换得到相应字符,使用函数 ord() 和 chr() 实现ASCII码和字符间的转换。

Nowdoc结构
就象heredoc结构类似于双引号字符串,Nowdoc结构是类似于单引号字符串的。Nowdoc结构很象heredoc结构,但是 nowdoc不进行解析操作 。 这种结构很适合用在不需要进行转义的PHP代码和其它大段文本。与SGML的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本类似,nowdoc结构也有相同的特征。

从浮点数转换

当从浮点数转换成整数时,将向零取整。

如果浮点数超出了整数范围(通常为 /- 2.15e 9 = 2^31),则结果不确定,因为没有足够的精度使浮点数给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

您可能感兴趣的文章:

  • PHP数字和字符串ID互转函数(类似优酷ID)
  • 生成随机字符串和验证码的类的PHP实例
  • php中的Base62类(适用于数值转字符串)
  • php中将字符串转为HTML的实体引用的一个类
  • PHP mb_convert_encoding 获取字符串编码类型实现代码
  • php实现根据字符串生成对应数组的方法
  • PHP处理JSON字符串key缺少双引号的解决方法
  • PHP处理Json字符串解码返回NULL的解决方法
  • PHP获取一个字符串中间一部分字符的方法
  • php实现的替换敏感字符串类实例

一个nowdoc结构也用和heredocs结构一样的标记 <<<, 但是跟在后面的标志符要用 单引号括起来,就像<<<'EOT'这样。heredocs结构的所有规则也同样适用于nowdoc结 构,尤其是结束标志符的规则。

Warning

决不要将未知的分数强制转换为integer,这样有时会导致不可预料的结果。

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

PHP浮点型

浮点数(也叫浮点数,双精度或实数)可以用以下任一语法定义:

<?php
    $a = 1.234;
    $a = 1.2e3;
    $c = 7E-10;
?>

这里共有两种语法规则:一种简单 规则,一种复杂规 则。简单的句法规则是最常用和最方便的, 它可以用最少的代码在一个字符串中加入变量, 数组 值,或 对象属性。

PHP字符串

复杂的句法规则是在PHP4以后加入的,被花括号包围的表达式是其明显标记。

语法

一个字符串通过下面的4种方法来定义:
单引号
双引号
heredoc语法结构
nowdoc语法结构(自PHP5.3.0以后)

本文由澳门皇冠金沙网站发布于编辑程序,转载请注明出处:php数字类型之字符串类型详解,数据类型之字符