Временная строка, созданная для хранения содержимого файла, будет уничтожена. Не углубляясь в источники для подтверждения, вот несколько способов проверить, уничтожается ли временное значение, созданное в качестве параметра функции:
Метод 1: класс, который сообщает о своем уничтожении
Это демонстрирует время жизни с использованием класса, который сообщает о своей смерти:
class lifetime
{
public function __construct()
{
echo "construct\n";
}
public function __destruct()
{
echo "destruct\n";
}
}
function getTestObject()
{
return new lifetime();
}
function foo($obj)
{
echo "inside foo\n";
}
echo "Calling foo\n";
foo(getTestObject());
echo "foo complete\n";
Это выводит
Calling foo
construct
inside foo
destruct
foo complete
Что означает, что подразумеваемая временная переменная уничтожена сразу после вызова функции foo.
Метод 2: измерение использования памяти
Вот еще один метод, который предлагает дальнейшее подтверждение, используя memory_get_usage , чтобы измерить, сколько мы потребили.
function foo($str)
{
$length=strlen($str);
echo "in foo: data is $length, memory usage=".memory_get_usage()."\n";
}
echo "start: ".memory_get_usage()."\n";
foo(file_get_contents('/tmp/three_megabyte_file'));
echo "end: ".memory_get_usage()."\n";
Это выводит
start: 50672
in foo: data is 2999384, memory usage=3050884
end: 51544