1.1.1. 01.类型


php 开启 '<? ?>' 短标签:在 php.ini 中找到 short_open_tag 改为 true。(不建议使用) 如果文本为纯 PHP 代码,则最好删除 PHP 结束标记,这样可以防止意外加入的空格和换行符,会导致 PHP 输出本无意输出的空格。 php 的 ?> 结尾自带一个分号,如 <?php echo 'a'?> 合法。

1、类型

PHP 支持 9 种原始数据类型

基本类型,标量
  1. 整形 integer
  2. 字符串 string
  3. 浮点型 float
  4. 布尔型 boolean
    复合类型
  5. 对象 object
  6. 数组 array
  7. 可调用 callback
    其他
  8. 资源 resource
  9. NULL 其类型判断可通过:is_integer , is_string() , is_float() , is_bool() , is_array() , is_object() , is_resource() , is_null() , is_numeric() , is_scalar() 判断是否是标量
1.1 Boolean 布尔类型
  $bool = True; // 不区分大小写
其他类型转换

当其他类型转换为 Boolean 时,以下 7 个会被认为是 FALSE:

  1. 布尔 FALSE 本身
  2. 整型 0
  3. 浮点型 0.0
  4. 空字符串 '' 以及 '0'
  5. 不包含任何元素的空数组 []
  6. 特殊类型 NULL
  7. 从空标记生成的 SimpleXML 对象。
1.2 Integer 整型

32 位系统中范围为 -2^31-1 ~ 2^31-1 64 位系统中范围为 -2*63-1 ~ 2^63-1

    123
    -123
    0123 #八进制
    0x123 #十六进制

当给定的数超过范围时,php 会自动将其变为 浮点型(Float) 。同样通过计算的超过范围也会返回 浮点型(Float) 。做除法运算时,除不尽的也会变成 浮点型(Float)

PHP 7.0.0 起,NaN 和 Infinity 在转换成 integer 时,不再是 undefined 或者依赖于平台,而是都会变成零。

其他类型转换
  1. 资源类型 Resource 将返回 php 运行时 resource 分配的唯一资源号
  2. 布尔型 Boolean false=0,true=1
  3. 浮点型 Float 通常情况下是向下取整,但是由于精度问题可能造成无法预估的情况
echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
  1. 字符串 String 如果字符串中没有包含 ',','E'或'e',该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。
1.3 Float 浮点型

浮点数精度有限,取决于系统。永远不要相信浮点数最后一位。也不要直接比较两个浮点数,如需要请使用精度函数 bc。

字符串转换为数值
<?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)     
?>
1.4 String 字符串

字符串有 4 种表示方法

  • 单引号,单引号中变量不被解析。如果要表达单引号本身需要加反斜线\。
      $a = 'abc';
      $b = '$a';//$a 
      $c = "$a"; //abc
    
  • 双引号,双引号中的变量以及特殊字符会被解析。
    \n    换行(ASCII 字符集中的 LF 或 0x0A (10))
    \r    回车(ASCII 字符集中的 CR 或 0x0D (13))
    \t    水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
    \\    反斜线
    \$    美元标记
    \"    双引号
    
  • heredoc 结构是一种提供一个开始标记和一个结束标记。方便书写大段的字符串。结束标记必须顶格写。类似双引号。单引号不转义。变量解析
<?php
    class foo
    {
        /* 含有变量的更复杂示例 */
        var $foo;
        var $bar;

        function foo()
        {
            $this->foo = 'Foo';
            $this->bar = array('Bar1', 'Bar2', 'Bar3');
        }
    }

    $foo = new foo();
    $name = 'MyName';

    echo <<<EOT
    My name is "$name". I am printing some $foo->foo.
    Now, I am printing some {$foo->bar[1]}.
    This should print a capital 'A': \x41
    EOT; 

    // 输出 My name is "MyName". I am printing some Foo.
    Now, I am printing some Bar2.
    This should print a capital 'A': A
  • Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作 nowdoc前需要加上单引号。
<?php
    $str = <<<'EOD'
    Example of string
    spanning multiple lines
    using nowdoc syntax.
    EOD;

string中的字符可以通过一个从 0 开始的下标,用类似 Array 结构中的方括号包含对应的数字来访问和修改,也可以通过花括号{}。

    $a = 'start';
    echo $a[0]; // 输出 s
    echo $a{0}; // 输出 s

字符串的连接使用 . 来完成。

    $a = 'a';
    $b = 'b';
    echo $a.$b; // ab

复杂(花括号)语法,可以在字符串中使用复杂表达式。其方式为在 string 中将表达式通过 {}(花括号)括起来。变量$符号必须紧挨{(左花括号)。

    $great = 'fantastic';
    echo "This is {$great}"; // 有效
    echo "This is { $great}"; // 无效
    echo "This is ${great}"; // 有效

    echo "This square is {$square->width}00 centimeters broad."; // 有效
    echo "This works: {$arr['key']}";// 有效,只有通过花括号语法才能正确解析带引号的键名
    echo "This works: {$arr[4][3]}"; // 有效

    echo "This works: {$arr['foo'][3]}"; // 有效,当在字符串中使用多重数组时,一定要用括号将它括起来

    // 有效
    echo "This works: " . $arr['foo'][3];

    echo "This works too: {$obj->values[3]->name}";

    echo "This is the value of the var named $name: {${$name}}";

    echo "This is the value of the var named by the return value of getName(): {${getName()}}";

    echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";
转换为字符串
  1. boolean 的 true 会被转换为 string "1",而 false 会被转换为 string ‘’。
  2. 整数和浮点数就直接被装换为字面的 string。
  3. array 类型会被转换为 string “Array”。
  4. object 类型会被转换为 string “Object”。
  5. 资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串。
  6. NULL 总是被转变成空字符串。
1.5 Array 数组

PHP 中的数组是一个有序映射。映射是一种把 values 映射到 keys 的类型。

    $a = array(1,2,3); // 索引数组
    $b = [
        'a'=>'abc',
        'd'=>'def',
    ]; // 简写 php5.4+,关联数组

键名

  • 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
  • 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
  • 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
  • Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
  • 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

1.6 Object 对象

通过 new 来实例化对象

    class a{}
    $obj = new a();

1.7 Resource 资源

资源类型是保持外部的一个引用。如数据库的链接,文件的句柄等。

    $fp = fopen("./a.log");//resource

1.8 Null

Null 表示一个变量没有值。Null 类型唯一的值就是 Null。 3 种情况下会被认为是 Null

  1. 变量没有赋值
  2. 变量赋值 Null
  3. 变量被 unset();
    $a = null // null
    $b;//var_dump($b); null
    $c = 1;
    unset($c);//var_dump($c); null
    

1.9 Callback 类型

一些函数如 call_user_func() 或 usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。

    // An example callback function
    function my_callback_function() {
        echo 'hello world!';
    }

    // An example callback method
    class MyClass {
        static function myCallbackMethod() {
            echo 'Hello World!';
        }
    }

    // Type 1: Simple callback
    call_user_func('my_callback_function'); 

    // Type 2: Static class method call
    call_user_func(array('MyClass', 'myCallbackMethod')); 

    // Type 3: Object method call
    $obj = new MyClass();
    call_user_func(array($obj, 'myCallbackMethod'));

    // Type 4: Static class method call (As of PHP 5.2.3)
    call_user_func('MyClass::myCallbackMethod');
Copyright © Kagami丶 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-12-10 21:46:19

results matching ""

    No results matching ""