Ссылки, используемые в функциях

Поскольку обе переменные — и Smyvar. и Smyref — представляют одни и те же данные, то если вы разрушите любую из них с помощью PHP-функции unset (), данные не будут потеряны. Оставшаяся переменная будет по-прежнему ссылаться на те же данные. И это справедливо независимо от того, сколько ссылок на одну переменную будут разрушено. До тех пор, пока хотя бы одна из переменных ссылается на элемент данных, он остается доступным в сценарии через эту переменную.

Ссылки также могут использоваться в сочетании с функциями. Например, рассмотрим ситуацию, в которой желательно возвращать более одного значения из функции. Вернуть более одного значения с помощью оператора return невозможно, к тому же может быть нежелательным использование глобальных переменных. С помощью ссылок вы можете вернуть столько значений, сколько нужно, причем в относительно понятной манере.
Чтобы определить параметр функции как ссылку, предварите имя переменной параметра префиксом & и передавайте функции ссылку при вызове, как показано на листинге 1.28,
Листинг 1.28. Передача параметра по ссылке в рнр_

function reference_test(Svar, sSresult, sSresult2) { Sresult = “Это возвращаемое значение #1″; Sresult2 = “Вы передали Svar как параметр”; return 42;
}
Sres ■ referencetest(10, SSresl, &Sres2); echo “Значение \Sres равно ,Sres,
“; echo “Значение \Sresl равно ‘Sresl1
“; echo “Значение \Sres2 равно ‘Sres2′
“;

Это выдаст такой результат: Значение Sres равно ‘42′
Значение Sresl равно ‘Это возвращаемое значение #1′ Значение Sres2 равно ‘Вы передали 10 как параметр’
Чтобы лучше понять, как работает этот сценарий, пройдем его строка за строкой. Во-первых, объявлено, что функция ref erence_test () принимает три параметра. Первый параметр Sval — это стандартный параметр РНР, в то время как оставшиеся два — Sresult и Sresult2 — являются параметрами-ссылками. Когда вызывается функция ref erence_test {), ей передается три параметра. Первый — константное значение 10, а остальные два — ссылки на переменные Sresl и Sres2. При вызове устанавливается связь между переменными Sresult 1 и Sresult2 с одной стороны и Sresl и Sres2 — с другой (поскольку они друг на друга ссылаются). Поэтому, когда внутри функции изменяются значения Sresult и 5result2, связанные с ними переменные Sresl и Sres2 также изменяются. Функция по-прежнему возвращает целую константу 42, которая затем, как и ожидается, присваивается переменной Sres.

Tags: , ,

Related posts


Leave a Reply