PHP - 数据类型

布尔型

整型

浮点型

字符串

数组

对象

资源型

资源是由专门的函数建立和使用用的,比如fopen,mysql_connect等,可用get_resource_type来返回资源类型

$db = mysql_connect();
echo get_resource_type($db) . PHP_EOL;

$fp = fopen('/', 'w');
echo get_resource_type($fp);

使用打开文件,连接数据库,创建画布等的函数返回的都是资源型

Iterables

回调类型

能够接收用户自定义函数的函数,比如call_user_func,sort。回调函数不仅仅是函数,也可以是对象方法,包括静态类方法。
call_user_func举例,sort可看这里

  • 传递函数

    function doSomething() {
        echo 'Hello World';
    }
    call_user_func('doSomething'); // Hello World

    带有参数的回调函数

    function doSomething(...$param) {
        print_r($param); 
    }
    
    call_user_func('doSomething', '1', '2');
    // 输出一个数组
    // Array ( [0] => 1 [1] => 2 )
  • 传递类和方法

    class Test
    {
        public function doSomething() {
            echo "Hello World";
        }
    }
    call_user_func([new Test(), 'doSomething']);
    // 输出
    // Hello World

    静态方法

    class Test
    {
        public static function doSomething($param) {
            echo $param;
        }
    }
    call_user_func(['Test', 'doSomething'], 1, 2);
    // 输出第一个参数
    // 1

    传递带有参数的类和方法

    class Test
    {
        public function doSomething($param) {
            echo $param;
        }
    }
    call_user_func([new Test(), 'doSomething'], 1, 2);
    // 输出
    // 1

    从上面几个实例可以得出以下几点:

    1. call_user_func函数可以使用用户的自定义函数
    2. 可以传递类和方法,静态方法不需要类实例化
    3. call_user_func函数可以传递多个参数,直接echo获取的是第一个参数,如果需要获取全部参数,需要在方法中以下面这种方式获取,这是php的语法糖。

      function doSomething(...$param) {
          print_r($param);
      }