Посилання в php - як вони працюють і коли їх використовувати, сайтобудування - розробка, створення і


Посилання в php - як вони працюють і коли їх використовувати, сайтобудування - розробка, створення і

Що ж таке посилання в PHP?

Присвоєння посилання в PHP

Тут ми створили змінну $ myVar зі значенням «Привіт!». Потім ми присвоїли значення іншої змінної $ anotherVar. Це копія значення першої змінної в другу. Потім ми змінимо значення, збережене в $ anotherVar на «Побачимося пізніше».

Оскільки дві змінні є незалежними, $ myVar як і раніше зберігає свою первісне значення ( «Привіт!»), Яке буде виїдемо на сторінці. Поки все йде добре. А тепер давайте змінимо приклад, щоб привласнити змінної $ myVar значення $ anotherVar. використовуючи посилання. а не значення. Щоб зробити це, ми просто напишемо знак амперсанда ( «») після знака рівності:

Тепер ви можете бачити, що $ myVar також змінений на «Побачимося пізніше»! Чому це сталось? Замість того, щоб привласнити значення змінної $ myVar змінної $ anotherVar - які просто створюють дві незалежних копії одного і того ж значення - ми зробили змінну $ anotherVarссилкой на значення $ myVar. Іншими словами, $ myVar і $ anotherVar обидва вказують на одне і те ж значення. Таким чином, коли ми присвоїли нове значення змінної, $ anotherVar значення змінної $ myVar також змінилося.

Зверніть увагу на те, що ми могли б змінити значення змінної $ myVar на «Побачимося пізніше» замість зміни змінної $ anotherVar і результат був би такий самий. Дві змінних, по суті, є ідентичними.

Видалення посилання в PHP

Ви можете видалити посилання за допомогою функції PHP unset () також як ви видаляєте звичайну змінну. Коли ви видаляєте посилання, ви просто видаляєте саму посилання, а не значення посилання:

Значення залишається в пам'яті, поки ви не видалите всі посилання на нього, в тому числі в вихідної змінної:

Передача змінних у функцію за посиланням

Посилання дійсно працюють, якщо ви передаєте їх як аргументи функцій. Як правило, коли ви передаєте змінну в функцію,
функція отримує копію значення цієї змінної. Передаючи посилання на змінну функція може послатися на цю змінну,
але що ще важливіше, змінити вихідну змінну.

Щоб передати аргумент в якості посилання встановіть знак амперсанда перед ім'ям параметра функції:

Тепер, кожен раз при виклику myFunc () і передачі змінної PHP передає посилання на змінну, а не на значення змінної. Розглянемо простий приклад передачі за посиланням:

goodbye ($ myVar); echo $ myVar; // Виведе «Побачимося пізніше»

Ми це перевіримо, шляхом створення змінної $ myVar. з початковим значенням «Привіт!», викликавши функцію goodbye () з параметром $ myVar. переданим по посиланню. Функція goodbye (змінює значення, збережене в $ myVar на «Побачимося пізніше».

Таким чином, використовуйте передачу по посиланню щоразу, коли ви хочете змінювати змінну, яка передається в якості аргументу функції. Просто не так. До речі, не піддавайтеся спокусі записати знак амперсанда перед аргументом при виконанні функції:

Запис знака амперсанда перед параметром у визначенні функції є достатнім для того, щоб передати змінну шляхом посилання. Багато функцій, вбудованих в PHP використовують передачу аргументів за посиланням. Наприклад, функція sort () приймає посилання для сортування масиву, так що ця функція може змінити порядок елементів в масиві.

Повернення за посиланням з функцій

Якщо можна передавати змінні за посиланням в функцію, то так само можна повертати посилання з функції. Для цього потрібно записати знак амперсанда перед назвою функції в її визначенні. Ви також повинні записати знак амперсанда (=) при присвоєнні функції змінної, в іншому випадку ви просто присвоїти значення, а не посилання.

У цьому прикладі функція getNumWidgets () знаходить глобальну змінну $ numWidgets і повертає посилання на неї. Потім ми викликаємо getNumWidgets (). яка зберігає повернуті посилання в $ numWidgetsRef, і зменшує значення у змінній, на яку вказує $ numWidgetsRef. Це те ж саме значення, на яке вказує змінна $ numWidgets, як можна побачити з результату роботи функції echo.

Можливо, ви не так часто користуєтеся поверненням по посиланню, як передачею по посиланню, але цей метод може бути корисний в деяких ситуаціях, наприклад, коли ви хочете створити функцію пошуку (або метод класу), яка знаходить змінну (або властивість класу) і повертає посилання на змінну або властивість, так щоб викликається код міг керувати змінної або властивістю.

Зміна значень у реченні foreach за допомогою посилань в PHP

Ще один корисний приклад використання посилань для зміни значень в масиві за допомогою циклу foreach. За допомогою звичайного ціклаforeach, ви працюєте скопией значень масиву, так що, якщо ви зміните її значення ви не торкнеться вихідного масиву. Наприклад, спробуйте перевести у верхній регістр назви музичних груп в масиві за допомогою циклу foreach:

Відображатиметься таке:

Як ви можете бачити, вихідний масив ні змінений в результаті роботи циклу foreach. Разом з тим, якщо ми ставимо знак амперсанда до $ band в операторі foreach $ band стає посиланням на вихідний елемент масиву, а не на його копію. Потім ми можемо перетворити елементи масиву в верхній регістр:

Наш код тепер працює як і передбачалося, в такий спосіб:

Інший спосіб змінити значення масиву в циклі є використання циклу for замість foreach.

Коли посилання використовуються автоматично


Отже, ви дізналися чотири шляхи створення посилання безпосередньо:

  • Присвоєння посилання
  • Передача за посиланням
  • Повернення за посиланням
  • Створення посилання в циклі foreach

Крім того, є випадки, коли PHP автоматично створює посилання. У більшості випадків це вам не знадобиться, але знати про цю можливість буде корисно!

Посилання в PHP при використанні ключового слова global

Коли ви використовуєте ключове слово global всередині функції, щоб мати доступ до глобальної змінної, тоді, на самому ділі, ви створюєте посилання в глобальній змінній масиву $ GLOBALS.

Не одне і те ж, що такий приклад:

Посилання в PHP, коли використовується ключове слово $ this

При написанні об'єктно-орієнтованого коду часто використовується ключове слово $ this. При використанні $ this в межах методу об'єкта, виконується вказівка ​​на поточний об'єкт. Варто запам'ятати, що $ this завжди посилається на об'єкт, а не на його копію.

При передачі об'єктів

На відміну від інших типів змінної, всякий раз, коли ви привласнюєте, передаєте або повертаєте об'єкт, ви повертаєте посилання на об'єкт, а не на його копію. Як правило, передаючи функцію або метод ви працюєте з самим об'єктом, а не з його копією.

У деяких ситуаціях, коли ви дійсно хочете зробити копію об'єкта, ви можете використовувати ключове слово
clone. По суті, все набагато тонше. При створенні змінної об'єкта, вона містить покажчик на об'єкт в пам'яті, а не на сам об'єкт. При присвоєнні або передачі змінної ви насправді створюєте копію змінної. Але копія, також є просто покажчиком на об'єкт - обидві копії як і раніше вказують на той же об'єкт. Таким чином, в більшості випадків ви створюєте посилання.

Цей блог Новомосковскют вже багато людей
- Новомосковський і ТИ!