PHP数据类型

PHP 有8种数据类型:

  • booblean(布尔型)
  • integer(整型)
  • float(浮点型)
  • array(数组)
  • object(对象)
  • resource(资源)
  • NULL(空值)

检测数据类型相关的函数

函数 检测类型 举例
is_bool 检测变量是否是布尔类型 is_bool(true),is_bool(false)
is_string 检测变量是否是字符串类型 is_string('string'),is_string(1234)
is_integer/is_int 检测变量是否为整数 is_integer(34),is_integer('34')
is_float/is_double 检测变量是否为浮点类型 is_float(3.1415),is_float('3.1415')
is_array 检测变量是否为数组类型 is_array($arr)
is_object 检测变量是否是一个对象类型 is_object($obj)
is_null 检测变量是否为null is_null(null)
is_numeric 检测变量是否为数字或数字组成的字符串 is_numeric('5'),is_numeric('bccd110'

常量

在 PHP 中,用 definie() 函数来定义,基本格式:
define( $'变量名',常量表示的值,是否对大写敏感(可选参数,bool值));

例如:

<?php
    header("Content-type:text/html;charset=utf-8");

    define('MY_NAME', '沫沫');
    define('MY_AGE', '20');
    define('MY_HOBBY', '看小说睡懒觉');

    echo '本府'.MY_NAME.',年芳'.MY_AGE.',尤好'.MY_HOBBY.'。';

    function useConst(){
        echo '<p>函数名字叫:'.`__FUNCTION`__;
    }

    echo '<p>这是第'.__LINE__.'行';
    echo '<p>本文件的绝对路径为:'.__FILE__;
    useConst();
?>

魔术常量

名称 说明
__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域
__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域。
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

布尔型

PHP中布尔值 true 和 false 不区分大小写。
以下值被认为是 false:

  • 布尔值 false 本身。
  • 整型值 0.
  • 浮点型值 0.0。
  • 空字符串和字符串“0”。
  • 不含任何元素的数组。
  • 不含任何成员变量的对象(仅对php4.0适用)。
  • 特殊类型NULL(包括尚未定义的变量)。
  • 从没有任何标记的 XML 文档生成的 SimpleXML 对象。

字符串型

单、双引号
双引号中所包含的变量会自动被替换长实际数值。
单引号中包含的变量则会按普通字符输出。

转义字符

HereDoc
注意:结尾的标识符前面不能有空格。

数组

varry(value1,
		value2,
		......)

varry(key1 => value1,
		key2 => value2,
            ......)
$my_array[key1] = value1;
$my_array[key2] = value2;
......

NULL

不区分大小写。

满足以下条件之一时,变量的值为NULL:

  • 变量没有被赋任何值。
  • 变量被指定为NULL。
  • 使用 unset() 函数删除的变量。

强制类型转换

强转类型 功能描述
(boolean) 强转为Boolean类型
(string) 强转为字符串类型
(integer) 强转为整型
(float) 强转为浮点型
(array) 强转为数组
(object) 强转为对象

看下面的代码,可以说你绝对不可能说出正确的答案。

<?php
	echo (int) 123.999999999999999;
	echo (int) -1.999999999999999;
	echo (int) -1.9999999999999999;
	echo (int) -0.99999999999999999;
	echo (int) -10.999999999999999;
	echo (int) -1000.9999999999999;
	echo (int) -9999999999;
?>

下面来看看我得到的结果。

首先要说明下我的系统环境:Windows10 64位

得到的结果如下

124
 -1
 -2
 -1
 -10
 -1000
 -1410065407

官方给出的说法是: 当从浮点数转换成整数时,将向零取整。

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

那么,我们来看下面的这个例子。

echo (int) ( (0.1+0.7) * 10 );

不用猜了,这里的执行结果是---7!

对,你没看错,我也没敲错,结果是 7 ,而不是我们通常认为的 8 。

PHP官方有这么一句警告: 决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。

所以在进行强制类型转换的时候一定要慎重!大数值,高精度,分数都要慎用!

当然,上面的那个例子可以这样来处理。

<?php
    $num = (0.1 + 0.7) * 10;
    echo (int) $num;	//输出7

    (int)$num2 = (0.1 + 0.7) * 10;
    echo $num2;		//输出8
?>

字符串运算符

<?php
    header("Content-type:text/html;charset=utf-8");
    
    $a = '今年是';
    $b = 2018;
    $c = '年。';

    $d = $a.$b.$c;

    echo $d;

    $e = '请叫我';
    $f = '小沫';
    $g = "{$e}{$f}";

    echo $g;
?>
posted @ 2019-06-22 15:28  你是真的菜啊  阅读(259)  评论(0编辑  收藏  举报