php数据类型(二)

 

四、字符串

一个字符串就是由一系列的字符组成。一个字符占一个字节,一个字节8位,所以一个字节只有2^8 256个不同的值。字符串的长度可以很长。。。你可以当成是无限长吧,不过事实上是和机器的内存有关的。以下的字符串定义都是正确的:

$str1 = '我是\'字"符\n串1';//单引号
$str2 = "我是\\\"字'符\n串2$str1\\";//双引号
$str3 = <<<EOT
我是字"符'串
EOT;
//Heredoc
$str4 = <<<'EOT'
我也"是'字符串  k
EOT;
 //Nowdoc
var_dump($str1);
var_dump($str2);
var_dump($str3);
var_dump($str4);

实验证明使用heredoc或者nowdoc定义的时候<<<后面的字符是可以自定义的,结尾要一样,但是有个要求就是分隔符后面不能有任何字符,包括空格,所以真正的字符串从下一行开始,然后结束标记必须是另起一行,前面也不能有任何字符,不能缩进。另外上例中也说明了怎么使用反斜杆来打印双引和单引号,以及其他特殊用法,稍微记一下就可以了。双引号可以直接引用如str2。双引号定义会替换下表中的特殊字符

Sequence Meaning
\n 换行 (LF or 0x0A (10) in ASCII)
\r 回车 (CR or 0x0D (13) in ASCII)
\t 水平方向的 tab(HT or 0x09 (9) in ASCII)
\v 竖直方向的 tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5)
\f 换页 (FF or 0x0C (12) in ASCII) (since PHP 5.2.5)
\\ 反斜线
\$ 美金dollar标记
\” 双引号
\[0-7]{1,3} 符合该表达式顺序的字符串是一个八进制的字符
\x[0-9A-Fa-f]{1,2} 符合该表达式顺序的字符串是一个十六进制的字符

其中str2中的\n被替换成了换行,但是str1中并没有原样输出。可以这样理解heredoc就是双引号,nowdoc就是单引号。只是其中的双引号单引号不用用\转义了。 另外注意一点:Nowdoc结构是在PHP 5.3.0中加入的。所以早起版本的php会出错。 在双引号中替换变量的时候要注意变量名是否一致,可以使用{$b}来要求php仅把$b当成变量。可以试下下面的代码

$ab = "ab";
$a = 'ac';
$str1 = "我是字符串$ab";
$str2 = "我是字符串{$a}b";

var_dump($str1);//我是字符串ab
var_dump($str2);//我是字符串acb

字符串可以使用$str[数字]来取字符串中的字符,数字从0开始。 一个boolean TRUE 值被转换成 字符串“1”Boolean FALSE 被转换成“” (空的字符串)。 这种转变可以在boolean 和 字符串 之间往返进行。 一个 整数 或 浮点数 被转变为数字的字面样式的字符串(包括浮点数中的指数部分),使用指数计数法的浮点数 (4.1E+10)也可转变。 数组转换成 字符串“Array” 对象被转换成 字符串“Object” 资源转变成字符串“Resource id #1”这种结构的 NULL总是被转变成空的字符串。 所以打印数组对象和资源的时候可以是用var_dump或者print_r而不是echo print

五、对象

对象一般需要事先定义。要实例化一个对象用new,请看如下代码

class car
{
    function run()
    {
        echo "I'm running."; 
    }
}

$myCar = new car;
$myCar->run();

如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会实例化一个内置类 stdClass 的对象。如果该值为 NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar的成员变量将包含该值。

六、资源类型

资源是一种特殊变量,保存了到外部资源的一个引用。mysql查询结果就是一种典型的资源类型。资源没有转换的意义。资源的释放由系统完成,mysql资源除外。通过get_resource_type()可以得到资源来的类型。

七、null

特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL,大小写不敏感NULL和null是一样的。下列情况将被视为null:

  • 被赋值为 NULL
  • 尚未被赋值。
  • unset()

实际使用中可以用is_null()函数来判断一个变量是不是null;

八、数组

PHP 中的 数组 实际上是一个把values关联到keys的有序映射。定义方法

array(  key =>  value
     , ...
     )
// 键(key) 可是是一个 整数(integer) 或 字符串(string)字符串必须用引号引起来.
// 值(value) 可以是任意以上类型的值包括数组

如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。 如果给一个当前最大键名是负值的数组添加一个新值,则新生成的的索引将为零(0)。要使用数组的值只要使用下标就可以了,数字下标直接使用,字符串下标要加引号。试试下面的代码吧

var_dump(array(5 => 43, 32, 56, "b" => 12));
var_dump(array(-3 => 43, 32, 56, "b" => 12));
$arr = array(0=>'百度',"x"=>'google');
var_dump($arr[0]);
var_dump($arr['x']);
$arr['x'] = 'bing';
var_dump($arr);

要修改一个数组可以直接给某个key设置赋值就好了比如上面最后两行,如果要给数组添加没有key的新值可以这样做$arr[] = ‘1’;如果 $arr 还不存在,将会新建一个。这也是一种定义数组的替换方法。要改变一个值,只要给它赋一个新值。如果要删除一个键名/值对,要对它用 unset()。

遍历数组使用foreach,其中key可以有野可以没有,看程序需不需要。试试下面的代码

$arr = array(1,2,3,4,5);
foreach($arr as $key=>$value){
  var_dump($key);//key可以自定义
  var_dump($value);//value也可以自定义,这是个简单的遍历
}

数组博大精深,在php中会经常用到。

本文固定链接: http://www.qaforcode.net/archives/194 | 猪哥每日一贴

该日志由 趴在树上的猪 于2012年11月10日发表在 php 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: php数据类型(二) | 猪哥每日一贴
关键字: ,
【上一篇】
【下一篇】

php数据类型(二):目前有2 条留言

  1. 沙发
    OMG:

    博大精深,有点浮云了 😕

    2012-11-17 下午 1:48 [回复]

发表评论


快捷键:Ctrl+Enter

浙公网安备 33010602001905号