验证变量是否为有效 GD 图像资源的方法


Way to verify if variable is a valid GD image resource?

我有一个接受GD图像资源作为其参数之一的类。据我所知,没有办法键入提示,因为它是一个资源而不是一个对象。有没有办法验证提供的参数是否是有效的 GD 图像资源(除了使用此资源的进一步功能失败)?

PS:请不要在您的回答中提及ImageMagick...

从 PHP 8.0 开始,get_resource_type带有 GD 图像参数,将抛出一个Fatal Error

PHP 致命错误:未捕获类型错误:get_resource_type():参数 #1 ($resource) 必须是资源类型,给定 GdImage。

我们应该使用get_class()函数。PHP 文档指出:

从 PHP 7.2.0 开始,不再允许显式传递 null 作为对象。该参数仍然是可选的,从类内部调用没有参数的 get_class() 将起作用,但现在传递 null 会发出E_WARNING通知。

因此,在 PHP 8.0 中检查此问题的正确方法应该是:

function is_gd_image($var) : bool {
    return (gettype($var) == "object" && get_class($var) == "GdImage");
}

get_resource_type函数应该可以帮助你。 除了编写代码并查看它返回的内容之外,我不确定它会对 GD 资源说什么,所以你只能靠自己了。 不过,应该是一个很好的起点!

如果资源是 gd 映像,则 get_resource_type() 返回 "gd",所以这就是你需要的。

if (is_resource($image) || $image instanceof 'GdImage)
{
}

做一个检查