Page 50 - 4636
P. 50

Передача за посиланням і передача за значенням
           Якщо потрібно створити функцію по імені increment(), що дозволяє збільшувати цілочисельне
        значення на одиницю, можна спробувати вирішити цю задачу наступним чином:
           function increment($value, $amount = 1) {
           $value = $value + $amount;
           Однак цей код не працює. У результаті виконання показаного нижче тесту виводиться значення 10.
           $value = 10;
           increment($value) ;
           echo $value;
           Як бачимо, вміст змінної $value не змінився.

           Такий результат є наслідком правил, що регламентують сферу дії. Представлений вище код створює
        змінну  $value,  яка  містить  значення  10.  Потім  викликається  функція  increment().  Змінна
        $value  створюється  у  функції  під  час  виклику  функції.  До  значення  цієї  змінної  додається  1,
        всередині функції значення $value рівне 11 до того часу, поки виконання функції не завершується і
        не здійснюється повернення і виклик її у коді. У виклику коду в якості змінної $value виступає інша
        змінна, визначена в глобальній області, а вона залишається незмінною.
           Один  із способів вирішення цієї проблеми передбачає оголошення змінної $value  у функції як
        глобальної,  але  це  означає,  що  для  використання  цієї  функції  змінну,  значення  якої  потрібно
        збільшити, потрібно назвати $value. Більш раціональним підходом було б використання передачі з
        посилання.
           Звичайний  спосіб  виклику  параметрів  функції  називається  передачею  за  значенням.  Коли  ви
        передаєте параметр, створюється нова змінна, яка містить передане значення. Вона являє собою копію
        вихідної  змінної.  Дане  значення  можна  змінювати  як  завгодно,  але  при  цьому  значення  вихідної
        змінної  поза  функції  залишається  незмінним.  (Взагалі-то  це  дещо  спрощений  опис  того,  що
        відбувається всередині php.)
           Більш раціональний підхід передбачає використання передачі по посиланню. У цьому випадку при
        передачі  параметра,  замість  того  щоб  створювати  нове  значення  функція  приймає  посилання  на
        вихідну  змінну.  Це  посилання  має  ім'я  змінної,  що  починається  зі  знака  долара  ($),  і  може
        використовуватися  абсолютно  так  само,  як  і  будь-яка  інша  змінна.  Відмінність  полягає  в тому,  що
        замість того, щоб мати власне значення, вона просто посилається на вихідну змінну. Будь-які зміни,
        що застосовуються до посилання, впливають також і на оригінал.
           Передача  використовуваного  параметра  за  посиланням  вказується  шляхом  приміщення  символу
        амперсанда (&) перед його ім'ям у визначенні функції. Ніякі зміни у виклику функції не потрібні.
           Раніше наведений приклад функції increment() можна змінити, передавши їй один параметр з
        посилання, після чого функція буде працювати коректно:
           function increment(&$value, $amount = 1) {
           $value = $value + $amount;
           }
           Тепер  у  нашому  розпорядженні  працююча  функція,  і  ми  можемо  назвати  змінну,  значення  якої
        хочемо  збільшити,  як  нам  заманеться.  Як  вже  згадувалося,  використання  одного  і  того  ж  імені
        всередині і за межами функції може призвести до плутанини, тому змінній в основному сценарії ми
        присвоїмо  нове  ім'я.  Тепер  наступний  тестовий  код  буде  виводити  на  екран  значення  10  перед
        зверненням до функції increment() і 11 - після нього:
           $а = 10;
           echo $а.'<br />';
           increment ($а);
           echo $а ’<br />';
           Ключове слово return



                                                            47
   45   46   47   48   49   50   51   52   53   54   55