Сегодня я обнаружил, что помимо объектов и примитивов PHP имеет ресурсы. В документации указано, что по умолчанию php передает имена по значению. Но мы знаем, что в PHP 5, объекты ссылаются на дескриптор, и поэтому, пока дескриптор передается по значению, вы можете обрабатывать дескрипторы как ссылки сами, аккуратно избегая вопроса.
Но как насчет ресурсов? Являются ли они, подобно объектам, просто ручками, которые будут рассматриваться как сами ссылки, или они являются значениями, которые копируются при их передаче?
Например:
/**
* Close the ftp connection and throw an exception.
*
* @hack Because php doesn't have a `finally` statement,
* we workaround it to make sure the ftp connection is closed.
* @param resource $conn FTP Buffer
* @param Exception $e
*/
function ftpCloseWithException($conn, $e) {
ftp_close($conn); // <-- Is this the same FTP Buffer resource or a new one?
throw $e;
}
/**
* Copy the README file from ftp.mozilla.org or do something equally arbitrary using ftp.
*/
function getMozReadme() {
try {
$conn = ftp_connect('ftp.mozilla.org');
…
} catch (Exception $e) {
ftpCloseWithException($conn, $e);
}
}