Посилання в 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. По суті, все набагато тонше. При створенні змінної об'єкта, вона містить покажчик на об'єкт в пам'яті, а не на сам об'єкт. При присвоєнні або передачі змінної ви насправді створюєте копію змінної. Але копія, також є просто покажчиком на об'єкт - обидві копії як і раніше вказують на той же об'єкт. Таким чином, в більшості випадків ви створюєте посилання.
Цей блог Новомосковскют вже багато людей
- Новомосковський і ТИ!