此包已被 废弃 并不再维护。未建议替代包。

PHP 的 gettype 函数的现代替代品。

1.0.0 2017-02-22 18:03 UTC

This package is not auto-updated.

Last update: 2020-01-24 17:03:18 UTC


README

Latest Stable Version License Total Downloads

PHP 的 gettype 函数的现代替代品。

安装

打开终端,进入您的项目目录,并执行以下命令以将此包添加到依赖项

$ composer require fleshgrinder/value

此命令要求您全局安装 Composer,如 Composer 文档中的 安装章节 所述。

使用

当前,Value 类包含一个名为 getValue 的单个静态方法以及与 PHP 类型名称对应的常量,这些名称与 getValue 方法返回的值相对应。目前没有计划扩展此 API,除非添加新类型或删除旧类型,否则以下功能被视为完整。

<?php

use Fleshgrinder\Core\Value;

$closed_resource = tmpfile();
fclose($closed_resource);

$values = [
	[],
	true,
	1.0,
	1,
	null,
	new stdClass,
	new DateTimeImmutable,
	tmpfile(),
	$closed_resource,
	'string'
];

foreach ($values as $value) {
	echo Value::getType($value) , "\n";
}

上述代码将输出以下内容

array
boolean
float
integer
null
stdClass
DateTimeImmutable
string
resource
closed resource

此输出对应于类中的可用常量,但具体类名称以及额外的可调用和可迭代伪类型名称除外

<?php

use Fleshgrinder\Core\Value;

echo Value::TYPE_ARRAY;             // array
echo Value::TYPE_BOOL;              // boolean
echo Value::TYPE_CALLABLE;          // callable
echo Value::TYPE_CLOSED_RESOURCE;   // closed resource
echo Value::TYPE_FLOAT;             // float
echo Value::TYPE_INT;               // integer
echo Value::TYPE_ITERABLE;          // iterable
echo Value::TYPE_NULL;              // null
echo Value::TYPE_OBJECT;            // object
echo Value::TYPE_RESOURCE;          // resource
echo Value::TYPE_STRING;            // string

此方法在创建错误消息时非常有用。PHP 世界中最常见的模式之一是以下内容

$type = is_object($arg) ? get_class($arg) : gettype($arg);

这不仅麻烦,而且由于 PHP 的 gettype 函数不一致,还会产生不一致的类型名称。这可以用此库提供的方法来替代。

$type = Value::getType($arg);

此方法从不抛出任何内容,也不产生错误。这个小型库的唯一目标是在尽可能多的地方保持代码 DRY(不要重复自己),因为毕竟这是最重要的原则之一。

我尝试将此更改纳入 PHP 核心库,但被拒绝,请参阅 PHP RFC: var_type 和下面的链接资源以获取更多信息。