我需要创建一个类型为resource的变量,它不是一个流。这意味着fopen()等创建的资源已经淘汰。理想情况下,应该可以在没有扩展的帮助下创建资源。
我会使用SQLite内存数据库句柄,但sqlite是一个可选的PHP扩展(即使它默认启用),不保证在任何给定的系统上安装(例如,在当前的Ubuntu安装中)默认情况下不安装sqlite扩展名。)
以下是测试用例的结构示例:
function is_stream($resource)
{
// some code that determines whether input is stream
}
class StreamResourceTest extends PHPUnit_Framework_TestCase
{
public function testStreamResource()
{
$stream = fopen(__FILE__, 'r');
$nonStream = ???; // how can this be created?
$this->assertTrue(is_resource($stream));
$this->assertTrue(is_stream($stream));
$this->assertTrue(is_resource($nonStream));
$this->assertFalse(is_stream($nonStream));
fclose($stream);
}
}
答案 0 :(得分:1)
stream_context_create()
Docs创建一个严格来说不是流资源的资源。
自
以来,他们可能被视为不需要延期从版本4.3.0开始,Streams是PHP不可或缺的一部分。无需任何步骤即可启用它们。
...尽管sqlite可能也是如此,所以你是否愿意接受它作为更好的选择取决于你。
此外,this page可能有所帮助。
答案 1 :(得分:1)
我也跑过List of Resource Types Docs并寻找可能与流无关的内容。大多数资源类型都需要扩展名或至少需要一个编译标志(如果你把文件系统输出)。
一个可能的候选人可能是socket_create()
Docs。
然而,由于目前还不清楚你在测试中想要实现什么(可能是模拟资源类型?),我不知道这是否正是你正在寻找的。您可能希望将测试代码添加到问题中,以使问题更加清晰。
修改强>
正如您已经澄清的那样,您要测试某个值是否为资源,然后您要检查资源类型:
$type = get_resource_type($var);