gettype — 获取变量的类型php
string gettype ( mixed $var )
settype — 设置变量的类型python
bool settype ( mixed &$var , string $type )
参数 | 解释 |
---|---|
var | 要转换的变量。 |
type | 转换后的数据类型 |
这是最简单的类型。boolean 表达了真值,能够为 TRUE 或 FALSE。laravel
要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。git
可是不少状况下不须要用强制转换,由于当运算符,函数或者流程控制结构须要一个 boolean 参数时,该值会被自动转换。面试
当转换为 boolean 时,如下值被认为是 FALSE:正则表达式
-1 和其它非零值(不论正负)同样,被认为是 TRUE!redis
整型值可使用十进制,十六进制,八进制或二进制表示,前面能够加上可选的符号(- 或者 +)。docker
<?php $a = 1234; // 十进制数 $a = -123; // 负数 $a = 0123; // 八进制数 (等于十进制 83) $a = 0x1A; // 十六进制数 (等于十进制 26) $a = 0b11111111; // 二进制数字 (等于十进制 255) ?>
若是给定的一个数超出了 integer 的范围,将会被解释为 float。数据库
一样若是执行的运算结果超出了 integer 范围,也会返回 float。ubuntu
FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。
当从浮点数转换成整数时,将向下取整。
echo (int)3.12; # 输出3
<?php $foo = 1 + "10.5"; // $foo is float (11.5) $foo = 1 + "-1.3e3"; // $foo is float (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) $foo = "10.0 pigs " + 1; // $foo is float (11) $foo = "10.0 pigs " + 1.0; // $foo is float (11) ?>
浮点型(也叫浮点数 float,双精度数 double 或实数 real)能够用如下任一语法定义:
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>
因此永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
若是确实须要更高的精度,应该使用任意精度数学函数或者 gmp 函数。
echo floor((0.1+0.7)*10); # 输出7
一个字符串 string 就是由一系列的字符组成,其中每一个字符等同于一个字节。
这意味着 PHP 只能支持 256 的字符集,所以不支持 Unicode 。
string 最大能够达到 2GB。
不像双引号和 heredoc 语法结构,在单引号字符串中的变量和特殊字符的转义序列将不会被替换。
用双引号定义的字符串最重要的特征是变量会被解析。
转义字符 | 含义 |
---|---|
\n | 换行(ASCII 字符集中的 LF 或 0x0A (10)) |
\r | 回车(ASCII 字符集中的 CR 或 0x0D (13)) |
\t | 水平制表符(ASCII 字符集中的 HT 或 0x09 (9)) |
\v | 垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起) |
\e | Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起) |
\f | 换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起) |
\ | 反斜线 |
\$ | 美圆标记 |
\" | 双引号 |
[0-7]{1,3} | 符合该正则表达式序列的是一个以八进制方式来表达的字符 |
\x[0-9A-Fa-f]{1,2} | 符合该正则表达式序列的是一个以十六进制方式来表达的字符 |
```php
$name = 'Hello'; echo <<<EOD 里面的变量$name会解析。 EOD;
$name = 'Hello'; echo <<<'EOD' 里面的变量$name不会解析。 EOD;
一个值能够经过在其前面加上 (string) 或用 strval() 函数来转变成字符串。
一个布尔值 boolean 的 TRUE 被转换成 string 的 "1"。Boolean 的 FALSE 被转换成 ""(空字符串)。
这种转换能够在 boolean 和 string 之间相互进行。
数组 array 老是转换成字符串 "Array"。
资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串。
NULL 老是被转变成空字符串。
<?php $foo = 1 + "10.5"; // $foo is float (11.5) $foo = 1 + "-1.3e3"; // $foo is float (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) $foo = "10.0 pigs " + 1; // $foo is float (11) $foo = "10.0 pigs " + 1.0; // $foo is float (11) ?>
PHP 中的数组其实是一个有序映射。映射是一种把 values 关联到 keys 的类型。
能够用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。
<?php $array = array( "foo" => "bar", "bar" => "foo", ); // 自 PHP 5.4 起 $array = [ "foo" => "bar", "bar" => "foo", ]; ?>
key 会有以下的强制转换
$arr = ['one'=>'First', 'two'=>'Second']; foreach ($arr as $key => $value) { echo '$key=' . "$key" . "<br>"; echo '$value=' . "$value" . "<br>"; }
要建立一个新的对象 object,使用 new 语句实例化一个类:
<?php class foo { function do_foo() { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); ?>
若是将一个对象转换成对象,它将不会有任何变化。
若是其它任何类型的值被转换成对象,将会建立一个内置类 stdClass 的实例。
<?php $obj = (object) array('1' => 'foo'); var_dump(isset($obj->{'1'})); // outputs 'bool(false)' var_dump(key($obj)); // outputs 'int(1)' ?>
对于其余值,会包含进成员变量名 scalar。
<?php $obj = (object) 'ciao'; echo $obj->scalar; // outputs 'ciao' ?>
资源 resource 是一种特殊变量,保存了到外部资源的一个引用。
资源是经过专门的函数来创建和使用的。
因为资源类型变量保存有为打开文件、数据库链接、图形画布区域等的特殊句柄,所以将其它类型的值转换为资源没有意义。
PHP也有垃圾自动回收机制,能够自动检测到一个资源再也不被引用了。
持久数据库链接比较特殊,它们不会被垃圾回收系统销毁。
特殊的 NULL 值表示一个变量没有值。NULL 类型惟一可能的值就是 NULL。
在下列状况下一个变量被认为是 NULL
使用 (unset) $var 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已。
mixed 说明一个参数能够接受多种不一样的(但不必定是全部的)类型。
例如 gettype() 能够接受全部的 PHP 类型,str_replace() 能够接受字符串和数组。
number 说明一个参数能够是 integer 或者 float。
array|object 意思是参数既能够是 array 也能够是 object。
void 做为返回类型意味着函数的返回值是无用的。
void 做为参数列表意味着函数不接受任何参数。
默认下标或带有数字索引的数组
键名不为纯数字带有指定值如标识符的数组
键(key)能够是一个整数integer或字符串string
值(value)能够是任意类型的值
$myarr['Q'] = "Q"; $myarr[] = "A"; $myarr[] = "B"; $myarr[2] = "B"; print_r($myarr); #在php中数据能够动态改变长度。而且会默认按下标进行赋值。
#一维数组 $myarr = array("A","B","C"); foreach($myarr as $key => $value){ echo "key=".$key; echo "value=".$value; echo " "; } #多维数组,递归输出数组值 function myfun(array $myarr){ foreach($myarr as $key => $value){ if(is_array($value)){ myfun($value); }else{ echo "key=".$key; echo "value=".$value; echo " "; } } } $myarr = array("A"=>array("1"=>array("a","b","c"),"2","3"),"B","C"); echo myfun($myarr)."维数组";
$myarr = array("A","B","C"); print_r(array_keys($myarr));
$myarr = array("A","B","C"); print_r(array_values($myarr));
#返回查找到的元素下标 $myarr = array("A","B","C"); echo array_search("B",$myarr);
#返回增长后数组的大小 $myarr = array("A","B","C"); echo array_push($myarr,"D"); print_r($myarr);
$myarr = array("A","B","C"); $myarr = array_chunk($myarr,2,true); print_r($myarr);
#返回删除重复元素后的数组 $myarr = array("A","B","C","B"); print_r(array_unique($myarr)); #unset无返回值 $myarr = array("A","B","C"); unset($myarr[2]);
$myarr1 = array("one","two"); $myarr2 = array("three","four"); $myarr3 = array_merge($myarr1, $myarr2); print_r($myarr3);
#第一种转换方式: (int) (bool) (float) (string) (array) (object) 2.$num1=3.14; 3.$num2=(int)$num1; 4.var_dump($num1); //输出float(3.14) 5.var_dump($num2); //输出int(3)
#第二种转换方式: intval() floatval() strval() 2.$str="123.9abc"; 3.$int=intval($str); //转换后数值:123 4.$float=floatval($str); //转换后数值:123.9 5.$str=strval($float); //转换后字符串:"123.9"
#bool settype ( mixed &$var , string $type ) type 的可能值为: “boolean” (或为“bool”,从 PHP 4.2.0 起) “integer” (或为“int”,从 PHP 4.2.0 起) “float” (只在 PHP 4.2.0 以后可使用,对于旧版本中使用的“double”现已停用) "string" "array" "object" “null” (从 PHP 4.2.0 起) 2.$num4=12.8; 3.$flg=settype($num4,"int"); 4.var_dump($flg); //输出bool(true) 5.var_dump($num4); //输出int(12)
echo decbin(12); //输出 1100
echo decoct(15); //输出 17
echo dechex(10); //输出 a
$binary = "11111001"; $hex = dechex(bindec($binary)); echo $hex;//输出f9
echo bindec('110011'); //输出 51
echo octdec('77'); //输出 63
echo hexdec("F"); //输出 15
$hexadecimal = 'A37334'; echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100
运算符优先级指定了两个表达式绑定得有多"紧密"。可使用括号来强制改变优先级。
若是运算符优先级相同,则使用从左到右的左联顺序。
#自加 $a=10; echo $a++; //先用再加,最后结果为10 echo ++$a; //先加再用,最后结果为11 $a = 10; $b = $a+ ++++$a; echo $a; //结果为12 echo " "; echo $b; //结果为22 #结合性致使的问题(++的优先级比+的高,且为右结合)