【发布时间】:2015-04-24 15:39:30
【问题描述】:
这一行:
$source_file = $s3->inputResource(fopen($source, 'rb'), filesize($source));
产生错误: PHP 严格标准:只能通过引用传递变量
我可以抑制错误,但想知道是否有修复。谢谢
【问题讨论】:
这一行:
$source_file = $s3->inputResource(fopen($source, 'rb'), filesize($source));
产生错误: PHP 严格标准:只能通过引用传递变量
我可以抑制错误,但想知道是否有修复。谢谢
【问题讨论】:
我相信你的问题是因为你试图传递一个函数调用的结果,该函数调用没有返回对其参数被定义为接受引用的函数的引用。
这就是manual中所说的:
下面的东西可以通过引用传递:
- 变量,即 foo($a)
- 新语句,即 foo(new foobar())
- 从函数返回的引用
fopen 没有返回引用,因此在将参数传递给接受引用的函数时尝试内联调用它是无效的。试试这个:
$fp = fopen($source, 'rb');
$source_file = $s3->inputResource($fp, filesize($source));
手册将这个示例描述为有效(因为bar() 返回一个引用):
<?php
function foo(&$var)
{
$var++;
}
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
?>
这个例子是无效的(这是我认为正在发生的):
<?php
function foo(&$var)
{
$var++;
}
function bar() // Note the missing &
{
$a = 5;
return $a;
}
foo(bar()); // Produces fatal error since PHP 5.0.5
【讨论】: