68918

Користувацькі функції

Лекция

Информатика, кибернетика и программирование

У будь-якій мові програмування існують підпрограми. У мові С вони називаються функціями, в асемблері — підпрограмами і викликаються інструкцією CALL, а в мові Pascal існує навіть два види підпрограм: процедури і функції.

Украинкский

2014-09-27

45 KB

0 чел.

Лекція № 11

Тема: Користувацькі функції

План

  1.  Користувацькі функції
  2.  Створення функцій

Що таке «призначені для користувача функції»

У будь-якій мові програмування існують підпрограми. У мові С вони називаються функціями, в асемблері — підпрограмами і викликаються інструкцією CALL, а в мові Pascal існує навіть два види підпрограм: процедури і функції.

Підпрограма — це спеціальним чином оформлений фрагмент програми, до якого можна звернутися з будь-якого місця усередині програми. Підпрограми істотно спрощують життя програмістам: вони покращують читабельність початкового коду, скорочують початковий код (не потрібно писати один і той же фрагмент кілька разів). У мові PHP підпрограми називаються функціями.

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

Особливості призначених для користувача функцій в РНР

Як уже згадувалося, в мові РНР підпрограми називаються функціями. Ось особливості використання функцій в РНР:

Ви можете використовувати параметри, встановлені за умовчанням. Це, зокрема, дозволяє викликати одну і ту ж функцію із змінним числом параметрів.

Функція може повертати будь-який тип.

Область видимості змінних усередині функції, так само як і в інших мовах програмування, деревовидна.

Наявність інструкції return, як в мові С.

Можна змінювати змінні,  передані як аргумент (як параметр-змінна в Паскалі).

Мова РНР надає програмістові величезну свободу при створенні власних функцій. При програмуванні на інших мовах мені дуже не вистачало параметри за умовчанням, які дозволяють написати функцію з різним числом параметрів. У мові C++ з'явився механізм перезавантаження функцій, але параметри за умовчанням — це гнучкіший засіб. Адже в C++ для кожної переобтяженої функції нам потрібно наново писати її тіло. А в мові РНР цього робити не потрібно. У цьому розділі ми обов'язково розглянемо параметри за умовчанням.

Проте у PHP-функцій окрім переваг є і недоліки, причому істотні. Перший недолік пов'язаний з оголошенням локальній функції. У РНР ви не можете оголосити локальну функцію, як це можна робити в інших мовах. Тобто, ви не можете створити функцію усередині іншої функції так, щоб перша (вкладена) функція була видна тільки в другій функції. У РНР вкладена функція буде видна всій програмі, тобто, не буде локальної. Розглянемо наступний приклад:

<?

function first() { echo "First"; function Second() (

echo "Second"; } )

First () ; second ()

?>

Сценарій надрукує FirstSecond. Це означає, що нібито локальна функція доступна у всій програмі.

  Примітка. Зверніть увагу на імена функцій при оголошенні (first і Second) і при виклику (First і second). Це не друкарська помилка - РНР нечутливий до регістра імен функцій. Ви можете викликати функцію first(), FIRsT() або якось інакше.

Другий недолік пов'язаний з областю видимості функцій. Але спочатку небагато скажемо про глобальні і локальні змінні. Глобальні змінні — це змінні, які видно і доступно всій програмі зі всіма вхідними в неї підпрограмами(функціям). Локальні змінні, визначені усередині підпрограм, видно і доступно тільки усередині самої підпрограми(функції), в якій вони визначені.

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

Наступний приклад підтверджує даний факт:

$i   =   10;

function   change()    {

$i   =   5;

echo "i = $i<br>\n";

change () ;

echo "i = $i";

Сценарій спочатку надрукує 5, а потім — 10.

Проте, в РНР існує можливість позбавитися від цього недоліку. Для цього передбачено використання спеціальної інструкції global, яка дозволяє функції працювати з глобальними змінними. Докладніше про це ми говоритимемо в п. 8.6.

Створення призначених для користувача функцій

Функція може бути оголошена в будь-якій частині програми (в межах операторів <? і ?>), але до місця першого її використання. Іншими словами, не потрібно ніякого попереднього оголошення, як в інших мови програмування, зокрема, в С. Дойдя до визначення функції, транслятор перевірить коректність визначення і відтранслюватиме визначення функції у внутрішнє уявлення, але транслювати код він не стане. Даний підхід є найправильнішим — навіщо транслювати код, який, можливо, ніколи не використовуватиметься?

Для оголошення функцій використовується такий синтаксис:

function   Ім'я    (аргумент1[=значение1],...,аргумент1[=значение1])

{

тіло   функції

}

Оголошення функції починається службовим словом function, потім слідує ім'я функції, після імені — список аргументів в дужках. Тіло функції полягає у фігурні дужки і може містити довільне число операторів.

Вимоги до імен функцій:

Ім'я функції може містити російські букви, але давати функціям
російські імена із зрозумілих причин не рекомендується.

Ім'я функції не повинне містити пропусків і пробільних символів.

Ім'я повинне бути унікальним з точністю до регістра, тобто
функції F1() і fl() — це одна і та ж функція.

Функціям можна давати такі ж імена, як і змінним, тільки без знаку долара на початку імені.

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

Перша функція

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

<?

function GetRand() {

$LocalArr = array();

mt_srand(time());

for($i=;$i<10;$i++) $LocalArr[] = mt_rand(0,100);

return $LocalArr;

}

$A = GetRand();

foreach($a as)

?>


 

А также другие работы, которые могут Вас заинтересовать

45278. Идеология и архитектура Softswitch коммутатора 135.5 KB
  Идеология и архитектура Softswitch коммутатора. Рисунок по архитектуре Softswitch является носителем интеллектуальных возможностей сети который координирует управление обслуживанием вызовов сигнализацию и функции обеспечивающие установление соединения через одну или несколько сетей. Фактически Softswitch остается тем же привычным коммутационным узлом но без цифрового коммутационного поля кросса и т. Термин Softswitch был придуман при разработке интерфейса между интерактивной речевой системой IVR и АТС с коммутацией каналов в...
45279. Многоканальные разговорные ИКМ - тракты с временным разделением каналов (ВРК) 136.5 KB
  Многоканальные разговорные ИКМ тракты с временным разделением каналов ВРК. тракты с временным разделением каналов ВРК. Цифровая система передачи ИКМ30 предназначена для формирования абонентских и соединительных линий ГТС и пригородной связи и позволяет организовать до 30 каналов ТЧ по парам низкочастотного кабеля ГТС а при наличии соответствующего оборудования сопряжения и линейного тракта каналоформирующая аппаратура ИКМ30 может использоваться для систем передачи по оптическим кабелям. Остальные 30 каналов используются для...
45280. Архитектура и интерфейсы GSM (мобильная станция, подсистема базовых станций, центр коммутации, домашний и визитный регистры) 62.5 KB
  Центр коммутации осуществляет постоянное слежение за подвижными станциями используя домашний регистр местоположения HLR и визитный регистр местоположения VLR. Ведется регистрация данных об изменении местоположения и роуминге блуждании абонента включая данные о временном идентификационном номере подвижного абонента TMSI Temporry Mobile Subscriber Identity и соответствующем визитном регистре местоположения VLR. Местоположение мобильных станций находится обычно в форме адреса данной мобильной станции в VLR. К данным содержащимся...
45281. Архитектура и интерфейсы GSM (регистры защиты и аутентификации, оборудование эксплуатации и технического обслуживания) 111.5 KB
  Сеть GSMвключает 3 основные части: мобильные станции MSкоторые перемещаются вместе с абонентом; подсистема базовых станций BSкоторая управляет радиолинией связи с мобильной станцией; подсистема сети SSS главную часть которой составляет центр коммутации мобильной связи MSC – он выполняет коммутацию между мобильными станциями а также между мобильными или стационарными сетевыми пользователями. Регистр идентификации оборудования база данных которая содержит список всей допустимой к обслуживанию подвижной аппаратуры на сети...
45282. Основные принципы организации сети GSM (интерфейсы, географические зоны, использование частот) 251 KB
  Основные принципы организации сети GSM интерфейсы географические зоны использование частот. Внутренние интерфейсы GSM Внутренние интерфейсы показаны и перечислены в таблице Таблица 1. Типы внутренних интерфейсов сети GSM Тип Связь между устройствами MSCBSS bis BSCBTS B MSCVLR C MSCHLR D HLRVLR E MSCMSC O BSCOMC M BSCTCE Um MSBTS X OMCOMC Примечание: Xинтерфейс предназначен для связи OMC различных GSM Аинтерфейс. Интерфейс между MSC и BSS подсистема базовых станций –BSC BTS обеспечивает передачу сообщений для управления...
45283. Каналы сигнализации и трафика в системе GSM (состав принципы использования) 88.5 KB
  Каналы сигнализации и трафика в системе GSM состав принципы использования. Очевидно что использование радиоканалов в мобильной сети GSM отличается от их применения в стационарной сети. Принцип использования каналов в системе GSM показан на рис. В стационарной сети абонентские линии абонентские каналы трафика закреплены за телефонным аппаратом.
45284. Коммутация в GSM (пример обслуживания вызова от абонента ТфОП к абоненту мобильной сети) 88 KB
  Обслуживание вызова от абонента стационарной сети к абоненту мобильной сети GSM В рассматриваемом примере порядок действий следующий: Входящий вызов поступает от стационарной сети ТфОП на вход шлюза MSC GMSC Gtewy MSC. Он передается назад в HLR GMSC. Затем соединение переключается к соответствующему MSC. MSC вырабатывает запрос VLR.
45285. Частотный план сетей UMTS/LTE и его развитие в LTE Advanced. Архитектура сети LTE. Назначение подсистем и узлов. Отличия от сети UMTS. Протоколы интерфейса S1 сети LTE 977 KB
  Для внедрения решений ВКР-07 по системам мобильной связи семейства IMT (LTE) рабочие группы Партнерского проекта 3GPP и ETSI определили в технических спецификациях 17 полос радиочастот для режима FDD и 8 полос для режима TDD (табл. 2.7) 124]. Кроме того, эти диапазоны также входят в число диапазонов, определенных в рекомендациях МСЭ для развития сетей мобильного беспроводного доступа третьего и четвертого поколени2
45286. Эталонная архитектура базовой сети LTE. Функции базовой сети SAE. Взаимодействие сети LTE с другими сетями. Физические, транспортные и логические, каналы сети E-UTRAN вниз и вверх 12.45 MB
  Эталонная архитектура базовой сети LTE. Функции базовой сети SE. Взаимодействие сети LTE с другими сетями. Физические транспортные и логические каналы сети EUTRN вниз и вверх.