2006/02/16

learn:学习php,数据结构 (一)

tags:learn,php,php5,数据结构,学习笔记
数据类型
8种基本类型
  4种标量类型
    boolean,integer,float|double,string
  2种复合类型
    array,object
  2种特殊类型
    resource,NULL
  boolean bool //所有为0为NULL或未定义的数据会转换为FALSE.
  interger int //Z={... , -2,-1,0,1,2, ...}; 0八进制数; 0x 十六进制;
   regex:
    decimal:[1-9][0-9]*|0
    hexadecimal:0[xX][0-9a-fA-F]+
    octal:0[0-7]+
    integer:[+-]?decimal|[+-]?hexadecimal|[+-]?octal
如果给定的一个数超出了 integer 的范围,将会被解释为 float

当从浮点数转换成整数时,数字将被取整(丢弃小数位)。

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


  float double//1.23 1.2e3 7e-10
   regex:
     LNUM          [0-9]+
    
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
     EXPONENT_DNUM ( ({LNUM} | {DNUM}) [eE][+-]? {LNUM})
  !!!! 0.1+0.7*10==7.9999... so floor((0.1+0.7)*10)==7
  
  string //字符串
   定义方式:单引号,双引号,界定符
     单引号: 和其他两种方式不同变量和转义序列不会被变量的值替换,除了\',单引号之前和字符串结尾需要两个\\.
     双引号:支持更多的转义字符\n \r \\ \$ \t \" \[0-7][1,3] \x[0-9a-fA-F]{1,2}
     界定符:
另一种给字符串定界的方法使用定界符语法("<<<")。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。

结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。

不能用定界符语法初始化类成员。
当用双引号或者定界符指定字符串时,其中的变量会被解析。
  {$great ${great} {$square ->width} {$arr[ 4][3]} {$arr [foo][3]} { $obj->values[3]->name } {${$name}}

字符串可以用"."(点)运算符连接。注意这里不能用"+"(加)运算符
   $str{strlen( $str)-1} = 'e';
   $third = $str{2 };
  
strval() 转换为字符串
   get_class()获取类名 数组 'Array' 对象 'Object' 资源 'Resource id #1'
   get_resource_type()
   $str=chr(ascii number).
   $intv=ord(string);
   sprintf(string format[,mixed args[,mixed...]]);//格式化输出 %bcdeufFosxX
 
php5文档中使用的伪类型
  mixed,number,callback
mixed//可以接收多种不同类型的数据
number//integer or float
callback//接收一个function为参数,可以是一个function也可以是对象的方法或静态类的方法

//打印变量的相关信息
var_dump(mixed expression[,mixed expression[,...]]);
//打印关于变量的易于理解的信息
print_r(mixed expression[,boolean return]);
<?php $b=array('m'=>'monkey','foo'=>'bar','x'=array('x','y','z'));
$results=print_r($b,true);echo $results ?>
code print_r_xml.php
<?php
header('Content-Type: text/xml; charset=UTF-8' );

$b=array( 'm'=>
"monkey"
,'foo'=>"bar" ,
'x'=>array( 'x'
,
'y','z' ));
echo print_r_xml($b);

function print_r_xml($arr,$first=
true) {
$output = "";
if ($first)
$output
.= "<?xml version=\"1.0
\"
encoding=\"UTF-8
\"
?>\n<data>
\n
";
foreach( $arr as
$key
=> $val) {
if (is_numeric(
$key
)) $key = "arr_".$key
; // <0 is not allowed
switch (gettype(
$val
)) {
case "array":
$output .= "<".htmlspecialchars
(
$key) ." type='array' size='".count
( $val)."'>".
print_r_xml( $val,false).
"</"
.htmlspecialchars ($key)
."> \n";
break
;
case "boolean":
$output .= "<".htmlspecialchars
(
$key )." type='bool'>".(
$val? "true":"false"
)
.
"</".htmlspecialchars($key
).">\n"
;
break;
case "integer":
$output .= "<".htmlspecialchars
(
$key)." type='integer'>".
htmlspecialchars($val).
"</"
.htmlspecialchars($key)
. ">\n";
break
;
case "double":
$output .= "<".htmlspecialchars
(
$key)." type='double'>".
htmlspecialchars($val).
"</"
.htmlspecialchars($key)
. ">\n";
break
;
case "string":
$output .= "<".htmlspecialchars
(
$key)." type='string' size='".strlen
($val)."'>".
htmlspecialchars($val).
"</"
.htmlspecialchars($key )
.">\n";
break
;
default:
$output .= "<".htmlspecialchars
(
$key) ." type='unknown'>".gettype
( $val).
"</".htmlspecialchars ($key
).">\n "
;
break;
}
}
if ($first)
$output
.= "</data>\n"
;

return $output;
}
?>

//获取变量的类型
gettype(mixed var);
  returns: boolean,integer,(double|float)=>double,string,array,object,resource,NULL,object,'unknown type'
//设置变量类型
settype(mixed var,string type);
//强制类型转换
(int|integer),(boolean|bool),(float|double|real),(string),(array),(object)
//自动类型转换
$floatvalue='1 one'+2+3.2==6.2
//操作字符串
$str='abc';
$str[1]=$str{1}=='b';//推荐使用{1},而不推荐使用[1]以免和数组混淆

is_object(),is_array(),is_bool(),is_float(),is_integer(),is_null(),is_numeric(),is_resource(),is_scalar(),is_string()
is_scalar(mixed var) ;//是否是integer,string,boolean,float类型
--
[:p] --fallseir.lee

1 条评论:

匿名 说...

Hey, while searching for widgets for my blog, I stumbled upon www.widgetmate.com and wow! I found what I wanted. A cool news widget. My blog is now showing latest news with title, description and images. Took just few minutes to add. Awesome!