Php入门教程之PHP,PHP中数据类型详解

作者: 关于计算机  发布:2019-09-26

PHP中数据类型详解

PHP 数据类型
PHP 帮忙种种原始类型(type)。

多样标量类型:
boolean (布尔型)
integer (整型)
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 boolean
$a_str  = "foo";  // a string
$a_str2 = 'foo';  // a string
$an_int = 12;     // an integer

八种标量类型:

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

1.string(字符串)
2.integer(整型)
3.float(浮点型,也作 double )
4.boolean(布尔型)
二种复合类型:

// If this is an integer, increment it by four
if (is_int($an_int)) {
    $an_int += 4;
}

1.array(数组)
2.object(对象)
二种特有类型:

// If $bool is a string, print it out
// (does not print out anything)
if (is_string($a_bool)) {
    echo "String: $a_bool";
}
?>

1.resource(资源)
2.NULL(空)
查阅变量类型
由此 gettype() 函数能够低价的查看有个别变量的项目:

只要要将二个变量强制转换为某项目,能够对其使用强制调换也许 settype() 函数。
留心变量依据其立刻的项目在特定场地下会议及展览现出不一样的值。越来越多消息见类型戏法。其它,你还是能够参照 PHP 类型相比较表看差别体系互相相比较的例证。
 
 
 
#
 
二、PHP的数据类型

<?php
$bool = TRUE;     // 布尔型
$str  = "foo";     // 字符串
$int  = 12;        // 整型

Int zjj=100;                  //这种赋值是对的

echo gettype($bool);        // 输出 boolean
echo gettype($str);     // 输出 string
echo gettype($int);     // 输出 integer
?>

Int zjj="hello,world";            //这种编译器就能提示错误

决断变量类型

在PHP中,对变量的数据类型无需申明,能够一直赋值。如上边包车型地铁

假虚构透过判定变量类型来能够采取 is_type 函数:

$zjj=100;               //表示zjj为整型

<?php
$var_int  = 12;

$zjj="hello,world"            // 表示zjj为字符串型

// 如果 $var_int 是 int 类型,那实行加法
if (is_int($var_int)) {
    $var_int = $var_int+4;
}
echo $var_int;  // 输出 16
?>

PHP中的数据类型分成二种:一是标量数据类型,另一种正是复合数据类型。

如上基本正是PHP数据类型的中坚内容,大家只要想明白具体每一种数据类型的用法,能够查阅PHP手册,里面有详尽的印证。

标量数据类型有:

数据类型调换

布尔型(boolean)         整型(integer)          浮点型(foat也叫做double)    

PHP数据类型有二种转移方式:

复合数据有:

•在要转移的变量此前拉长用括号括起来的对象项目
•使用3个实际品种的转变函数,intval()、floatval()、strval()
•使用通用类型调换函数settype(mixed var,string type)
 第一种转移格局: (int)  (bool)  (float)  (string)  (array) (object)
 
•<?php  
•$num1=3.14;   
•$num2=(int)$num1;   
•var_dump($num1); //输出float(3.14)   
•var_dump($num2); //输出int(3)   
•?> 

数组(array)        对象(object)

第三种转移形式:  intval()  floatval()  strval()

再有二种极度的数额

 
•<?php  
•$str="123.9abc";   
•$int=intval($str);     //转变后数值:123   
•$float=floatval($str); //转变后数值:123.9   
•$str=strval($float);   //调换后字符串:"123.9"    
•?> 

资源(resource)           空值(NULL)

其两种转移方式:  settype();

1、布尔型是最简单易行的变量,布尔变量:true和false值

 
•<?php  
•$num4=12.8;   
•$flg=settype($num4,"int");   
•var_dump($flg);  //输出bool(true)   
•var_dump($num4); //输出int(12)   
•?>

要设定贰个布尔变量,只需将那多少个值赋给变量就行了。PHP中就到底关键字也足以做变量名。

PHP数据类型隐性转变的骗局

<?php
 $True="小编是变量" . True;                   //这里有一点的,书上偶尔印刷并未。
 echo($True);
 echo("<B传祺>");                        //起到回车的作用
 echo("笔者是重要字" . True)
?>

本人这边说的是php5+上跑的,php4的请飘过。

实行结果:作者是变量1                            //这里true正是1

先把错误报告张开,避防看不到错误消息
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
?>

                  我是任重(Ren Zhong)而道远字1

根据php manual 中
“Comparison Operators” 一章的验证能够,number 和string进行相比较的时候,会先将string类
型首先转化为number,然后再扩充比较操作。

true和false实际上是意味数值1和0,由此true在输出时显得为1,可是在给变量赋值的时候,如果赋值为1,则被当成整型,若是被赋值为true,则被当成布尔型

1.类型机动调换为数组
当我们把三个非数组的变量当做数组来调用的时候,该变量在调用时数据类型有时机动调换到数组。
例如如下代码:
<?php
$str = 'string';
var_dump($str['aaa']);  // string(1) "s"
var_dump($str);  // string(6) "string"

当转变为布尔型时,以下值被以为是false

if($str['aaa'] === $str[0]) {
    print "===";
}
?>

 (1)布尔值false

一般来讲例子能够显明的看看下标类型自动转变在发生。
<?php 
$link = '<a href=";'; 
$key = '1-10'; 
echo "$link[$key]n";  // 同 $link[1]
echo "{$link[$key]}n";  // 同 $link[1]
//echo "$link['$key']n";  // 报错
echo "{$link['$key']}n";  // 同 $link[0]
?> 

(2)整型值0(零)

此处字符串在 var_dump($str['aaa']) 被一时调换到了数组 array('s','t','r','i', 'n','g'),而用关联数组形式
$str['aaa']读取索引数组的值,关联数组的下标'aaa'将被调换到整形下标,
故而在此处的$str['aaa']全等于$str[0]。

(3)浮点型值0.0(零)

其他数据类型隐性转变到数组也暗藏有陷阱,一般都不是报出undefined index错误。比如如下代码:
<?php
/**
 * 测量试验变量隐性调换到数组
 *
 * @param mixed $param
 */
function test2Arr($param) {
    var_dump($param['abc']);
}

(4)空白字符串和字符串"0"

test2Arr(false); // NULL
test2Arr(123); // NULL
test2Arr(123.456); // NULL
test2Arr('string'); // string(1) "s"
test2Arr(array('abc'=>'text'));  // string(4) text
test2Arr(new ArrayObject()); // Notice: undefined index: abc

(5)未有成员变量的数组

?>

(6)未有单元的靶子(仅适用php4)

消除办法:
函数参数数据类型是数组的时候,幸免客户输入字符串导致错误
一般来说例子,当增多客商的时候,大家渴求客商必得输入客户名。未有哪个SB把务求是数组的参数传入
字符串,但是防人之心不可无,说不定小编老是专门的学业超越18个钟头后一比相当大心就成非常SB了,又只怕
某一个人想绕过代码实践操作。
<?php
/**
 * 增多顾客(错误的写法)
 *
 * @param array $user
 */
function addUser($user) {
    if(empty($user['name'])) {  // 这里当输入类型是不为空的字符串的时候会出错,
        echo "客商名必填n";
        return false;
    }

(7)特殊种类NULL

    // do sth.

而有所别的值都被以为是TRUE包罗任何能源。

    echo "测试n";

2、整型

    return true;
}

+2147483647到-2147483647

/**
 * 增加客户(精确的写法)
 *
 * @param array $user
 */
function addUser2($user) {
    if(!is_array($user) || empty($user['name'])) {
        echo "客户名必填n";
        return false;
    }

 

    // do sth.

<?php
 $int_D=2147483647;  //十进制赋值
 echo($int_D);
 echo("<br>");
 $int_H=0x7FFFFFFF;  //十六进制赋值
 echo($int_H);
 echo("<br>");
 $int_O=017777777777;  //八进制赋值
 echo($int_O);
 echo("<BR>");
?>

    echo "测试n";

试行结果:

    return true;
}

2147483647
2147483647
2147483647

$user = 'xiaoxiao';
addUser($user);
addUser2($user);

倘若钦赐多少个数当先了inter的界定,将会被分解为float

?>

3、浮点型

2.纯数字字符串相比时自动转变来整形超过限制时产生溢出
<?php
$x1 = '111111111111111111';
$x2 = '111111111111111112';

1.7E-308到1.7E+308

echo ($x1 === $x2) ? "true" : "false";  // false 如大家所愿,这四个字符串确实不均等。
echo ($x1 == $x2) ? "true" : "false";    // true 这里被悄悄的改变类型了,
                                                           // 成了 echo (intval($x1) == intval($x2)) ? "true" : "false"; 整形溢出

<?php
 $float_1=90000000000; 
 echo($float_1);
 echo("<br>");
 $float_2=9E10; 
 echo($float_2);
 echo("<br>");
 $float_3=9E+10;
 echo($float_3);
?>

?>

实施结果:

3、整形和字符串比较时数据类型隐性转变有望爆发难题
<?php
$number = 0;
$string = 'text';

90000000000
90000000000
90000000000

if($number == $string) {
    print "true";
} else {
    print "false";
}

4、字符串

?>

PHP中有两种情势定义字符串

很缺憾这里出口的是 true
大家领悟 $number === $string 肯定是false,手册上说 === 是相比值&&数据类型,而用 == 只是相比值,
$number == $string 这里不是相比较值吗? '0' 和 'text' 显明不均等啊。小心了,这里的$string是
先被神秘转成和$number同样的整形再比较的,$number == (int)$string的确是true

1、单引号格局。

  1. in_array 小陷阱
    <?php

$single_str='我是人';

var_dump(in_array(0, array('s')));  // true

要是想在浏览中输出单引号,必须在字符串中参加转义符号“”

?>
因为in_array会将0 和's' 举办相比,0是number类型,'s'是string类型, 's'转化为number的结果为0,
而0 == 0 的结果是true,所以in_array(0, array('s', 'ss'))的结果也是true

<?
 $single_str='作者被单引号括起来了!<br>';      //寻常输出
 echo $single_str;
 $single_str='输出单引号: '嘿嘿,作者在单引号里面'<br>';      //加了转义符能够出口单引号
 echo $single_str;
 $single_str='输出双引号:"作者在双引号里面"<br>';         //平常输出
 print $single_str;
 $single_str='输双台币符号:$';                 //符合规律输出
 print $single_str;
?>

如果把in_array 的第七个参数strict设置为 true,相比较的时候 就会咬定值和花色是还是不是都一定。
比如都非凡的话,才会重回true,不然再次来到false.

实施结果:

小编被单引号括起来了!
出口单引号: '嘿嘿,作者在单引号里面'
出口双引号:"笔者在双引号里面"
输双欧元符号:$

(2)、双引号格局

$Double_Str="我是人"

为了在字符串中输出各类特殊字符,能够行使转义符

$Double_Str="输出比索符号:$";

$Double_Str="输出反斜杠:";

<?
 $Double_str="作者被双引号括起来了!<br>";
 echo $single_str;
 $single_str="输出单引号:'嘿嘿,笔者在单引号里面'<br>"; //无需转义符
 echo $single_str;
 $single_str="输出双引号:"小编在双引号里面"<br>";  //供给转义符
 print $single_str;
 $single_str="输出比索符号:$ <br>";  //要求转义符
 print $single_str;
 $single_str="输出反斜杠 : <br>";  //需求转义符
 print $single_str;
 
?>

实行理并了结果:

出口单引号:'嘿嘿,我在单引号里面'
输出双引号:"作者在双引号里面"
输出欧元符号:$
输出反斜杠 :

(3)、Heredoc 方式给字符串赋值

<?
$zjj1_str =<<<zjj          //=<<<那个一定于链接符,获取zjj到zjj中间的数额
 你好<br>
 法郎符号  $ <br>         //zjj1和zjj都是能够不管起名字的。
 反斜杠   <br>             
 "我爱你"<br>
 '我恨你'
zjj;
 echo $zjj1_str;
?>

实践结果:

你好
法郎符号 $
反斜杠
"我爱你"
'我恨你'

(4)、串中的变量

<?php
 $str_1 = "我是变量的值!"; 
 $str_2 = "str_1 : $str_1<br>";  //双引号字符串中隐含变量$str_1
 echo $str_2;

 $str_1 = '作者是变量的值';
 $str_2 = 'str_1 : $str_1<br>';  //单引号中含有字符串的值
 echo $str_2;

 $str_1 = "作者是变量的值!"; 
 $str_2 = "str_1 : $str_12 <br>";  //援引的变量名后,多了个字符2即$str_12
 echo $str_2;

 $str_1 = "作者是变量的值!"; 
 $str_2 = "str_1 : ${str_1}2 <br>";  //引用的变量名后,多了个字符2即$str_12
 echo $str_2;
?>

实施结果:

str_1 : 笔者是变量的值!
str_1 : $str_1
str_1 :
str_1 : 笔者是变量的值!2

从输出能够看来,双引号字符串是赋值的意义,间接出口变量的值。而单引号的字符串,满含的是变量的称谓,能够知晓为直接运行语句的结果,直接出口变量的名目并非变量的值。

$str_2 = "str_1 : $str_12 <br>";    那句要是变量前边跟着非空格的字符,会让编写翻译器糊涂,会把$str_12当成变量,而地点又尚未定义,因而会输出空值。为了缓慢解决那一个难题得以用${str_1}2 或{$str_1}2 这一个来发挥。
运用 PHP 函数对变量 $x 举行相比较
表达式 gettype() empty() is_null() isset() boolean : if($x)
$x = ""; string TRUE FALSE TRUE FALSE
$x = null; NULL TRUE TRUE FALSE FALSE
var $x; NULL TRUE TRUE FALSE FALSE
$x is undefined NULL TRUE TRUE FALSE FALSE
$x = array(); array TRUE FALSE TRUE FALSE
$x = false; boolean TRUE FALSE TRUE FALSE
$x = true; boolean FALSE FALSE TRUE TRUE
$x = 1; integer FALSE FALSE TRUE TRUE
$x = 42; integer FALSE FALSE TRUE TRUE
$x = 0; integer TRUE FALSE TRUE FALSE
$x = -1; integer FALSE FALSE TRUE TRUE
$x = "1"; string FALSE FALSE TRUE TRUE
$x = "0"; string TRUE FALSE TRUE FALSE
$x = "-1"; string FALSE FALSE TRUE TRUE
$x = "php"; string FALSE FALSE TRUE TRUE
$x = "true"; string FALSE FALSE TRUE TRUE
$x = "false"; string FALSE FALSE TRUE TRUE
 
麻痹轮廓相比 ==
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
1 TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
0 FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
-1 TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
"1" TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
"0" FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
"-1" TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
NULL FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
array() FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
"php" TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
 
严谨相比较 ===
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
1 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
0 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-1 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
"1" FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
"0" FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
"-1" FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
NULL FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
array() FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
"php" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
"" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE

本文由金沙澳门官网送注册58发布于关于计算机,转载请注明出处:Php入门教程之PHP,PHP中数据类型详解

关键词: