Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) [1] 2 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Пользовательские функция для новичков, С чем едят пользовательские функции
Kuliev  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Скорая помощь новичку
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 1508
Пользователь №: 17179
На форуме: 7 лет, 9 месяцев, 29 дней
Карма: 24




Доброго времени суток всем.
Решил запостить материал по поводу пользовательских функций для новичков которые только осваивают PHP.

Весь код имеет ознакомительный характер... И не может быть использован в реальном проекте так как отсутствует защита от хулиганов :)

В любом языке программирования существуют подпрограммы. В языке C они называются функциями, в ассемблере - подпрограммами, а в Pascal существуют даже два вида подпрограмм: процедуры и функции.

Подпрограмма - это специальным образом оформленный фрагмент программы, к которому можно обратиться из любого места внутри программы. Подпрограммы существенно упрощают жизнь программистам, улучшая читабельность исходного кода, а также сокращая его, поскольку отдельные фрагменты кода не нужно писать несколько раз

В PHP такими подпрограммами являются пользовательские функции.

Помимо встроенных функций PHP, часто возникает необходимость создания пользовательских функций, выполняющих определенные задачи.


//Простая пользовательская функция
function helloWorld()
{
//Объявляем переменную типа string
$str = 'Привет мир';

//Возвращаем значение функции
return $str;
}

//Вызываем нашу функцию
echo helloWorld() .'<br>'; //Выведет Привет мир


Теперь усложним нашу функцию передав ей какой нибудь параметр


function showString($str)
{
//Возвращаем значениее функции
return $str;
}

//Нашим параметром будет строка в переменной string
$string = 'Я люблю PHP';

//Теперь вызываем нашу функцию showString
echo showString($string) .'<br>'; //Вывидет Я люблю PHP


Передавать параметры в функцию можно сколько угодно $a, $b, $n
Параметры отделяются друг от друга запятой.


//Рассмотрим пример передавая несколько параметров в функцию
function calc($a, $b)
{
//Прибовляем значения $a + $b
$result = $a + $b;

//Выводим результат
return $result;
}

echo calc(5, 5) .'<br>';//Результат = 10


Теперь давайте усложним нашу функцию и напишем простой калькулятор




function calculator($a, $b, $action)
{
//Используем конструкцию SWITCH
switch($action)
{
case "+":
$res = $a + $b;
break;

case "-":
$res = $a - $b;
break;

case "*":
$res = $a * $b;
break;

case "/":
if($a == 0 or $b == 0)
$err = 'На ноль делить нельзя';
else
$res = $a / $b;
break;
}

//Если ошибок нет то выводим результат
if(empty($err))
return $res;
else
return
$err;
}

//Проверяем была ли нажата кнопка РАССЧИТАТЬ
if(isset($_POST['submit']))
{
//Передаем аргументы функции для ее обработки
echo calculator($_POST['a'], $_POST['b'], $_POST['action']) .'<br>';
}

//Форма калькулятора
echo "
<form method='POST'>
<input type='text' name='a'><br>
<select name='action' size='1'>
<option value='+'>+</option>
<option value='-'>-</option>
<option value='*'>*</option>
<option value='/'>/</option>
</select><br>
<input type='text' name='b'><br>
<input type='submit' name='submit' value='Рассчитать'><br>
</form>"
;


И так давайте смотреть работу нашего скрипта.

У нас есть форма, есть обработчик этой формы и есть вызов обработчика формы.
Сначала мы проверяем, была ли нажата кнопка формы пользователем, для этого нам поможет функция ISSET. Если данное условие верно то выполняется действие в нутрии конструкции IF. После этого мы передаем аргументы нашей функции, а именно первое число, второе число и то действие которое выбрали из SELECT (+,-,*,/).
После того как передали аргументы функции интерпретатор возвращается на строчку где у нас описывается сама функция function calculator(); и начинает обработку полученных аргументов. Получив результат работы функции мы его возвращаем с помощью конструкции RETURN.

Инструкция GLOBAL в пользовательских функциях.


$text = 'Я люблю PHP.';

function showText()
{
//Объявляем глобальную переменную внутри тела функции
global $text;

//Начальная строка текста
$str = 'Меня зовут Вася.';

//С помощью конкатенации склеиваем наши строки в одну строку.
$str = $str .' '. $text;

return $str;
}

echo showText() .'<br>'; //Вывод - Меня зовут Вася. Я люблю PHP.


Рассмотрим функцию showText(). Данной функции не было передано ни одного аргумента, но была передана переменная из скрипта не находящегося в теле функции. Это возможно благодаря директивы GLOBAL именно она позволяет нашей функции увидеть нашу переменную за пределами нашей функции. Если бы ее не было, то мы бы получили результат функции (Меня зовут Вася.).
Надеюсь, что Вы догадались, что GLOBAL это глобальный точнее определяет что переменная у нас теперь глобальная и видна из любого места нашего скрипта. В теле функции можно объявить сколько угодно глобальных переменных через запятую global $a, $b, $n.

Инструкция STATIC в пользовательских функциях

Рассмотрим функцию showNumeric(). В теле данной функции находится статическая переменная $num данная переменная видна только в теле функции. Вы спросите в чем разница данной переменной от просто переменной в теле функции ведь их тоже не видно за пределами функции.


function showNumeric()
{
//Объявляем статическую переменную
static $num;

//Инкриментируем ее
$num++;

//Возвращаем значение функции
return $num;
}

//Прогоняем вызов функции 10 раз
for ($i = 0; $i <= 9; $i++)
echo showNumeric();


Давайте рассмотрим пример действия функции с данной переменной.
Результат данных действия будет разный.
В первом варианте функция выведет нам 1 2 3 4 5 6 7 8 9 10
Если убрать директиву STATIC то результат работы функции будет такой 1 1 1 1 1 1 1 1 1 1.
Это связано с тем что переменная после вызова функции в цикле обнуляется.

Пользовательские функции параметры по умолчанию

Параметры по умолчанию – это когда вы определяете переменную как аргумент функции в функции для дальнейшей обработки параметров.
Простой пример:

//Функция с параметром по умолчанию
function varDefault($num = 10)
{
//Возвращаем значение
return $num;
}

//Проверяем ЕСЛИ функция возвращает 10 ТО выводи сообщение что функция вернула 10
if(varDefault() == 10)
echo 'Функция вернула число 10 <br>';
else
echo 'Функция не равна 10 <br>';

//ВЫВЕДЕТ: Функция вернула число 10

//А если написать так

if(varDefault(5) == 10)
echo 'Функция вернула число 10 <br>';
else
echo 'Функция не равна 10 <br>';

//ВЫВЕДЕТ: Функция не равна 10


Давайте разбираться по чему так происходит. Дело в том что мы задали параметр по умолчанию равному 10, согласно нашему первому условию он верно (ИСТИНА), что и демонстрирует эта часть кода. Второй части кода мы заменяем параметр нашей функции на 5 и тогда наше условии не выполняется (ЛОЖЬ).

Возможно с первого не понять для чего это вообще нужно и где это можно применить. Давайте попробуем смоделировать ситуацию, создадим функцию которая будет выводить меню на сайте (по умолчанию пользователя, если нужно то админа.


//Создаем массив ссылок
$link = array(
'Главная' => 'index.php',
'Новости' => 'news.php',
'О нас' => 'about.php',
'Форум' => 'forum.php'
);

//Определяем константы для формирования путей для ссылок
define('ADMIN_MENU', '/admin/');
define('HOST', 'http://'.$_SERVER['HTTP_HOST']);

function menu($link, $flag = false)
{
//Создаем пустой массив для с генерированых ссылок
$arr_link = array();

//Проверяем какое будет меню (ПОЛЬЗОВАТЕЛЬ / АДМИН)
if($flag === true)
$menu = ADMIN_MENU;
else
$menu = '/';

//Перебераем массив с данными для ссылок
foreach($link as $k => $v)
//Записываем все ссылки в массив
$arr_link[] = "<a href='".HOST.$menu.$v."'>". $k ."</a>\n";

//Возвращаем ссылки в виде массива
return $arr_link;
}

//Выводим результат работы скрипта (меню)
echo join('<br>', menu($link)) ."<br><br>\n"; //Меню ПОЛЬЗОВАТЕЛЯ
echo join('<br>', menu($link, true)) ."<br>\n"; //Меню АДМИНА


Если мы не передаем второй аргумент функции, то параметр функции остается по умолчанию, если мы укажем второй параметр TRUE, то выведем меню админа, так как мы изменили параметр по умолчанию.

Это всего лишь пример как можно применить параметр в функции по умолчанию, все зависит от вашей фантазии.

Таблица – ВЫВОД ЗЕБРОЙ (функция для новичка)

Довольно часто форумчане, особенно новички спрашиваю, как вывести таблицу зеброй. Вот как раз на этом примере я вам покажу удобства работы с пользовательскими функциями.

//Создаем массив с данными от 1 до 10
$data = range(1,10);

//Функция заливки таблицы
function bgColorTable($num)
{
//Первый цвет заливки строки таблицы
$bg = '#c0c0c0';

if(++$num % 2 == 0)
//Второй цвет заливки строки таблицы
$bg = '#ffffd0';

//Возвращаемый цвет заливки строки таблицы
return $bg;
}

//Рисуем саму таблицу
$tbl = "<table border='0' width='50%'>\n";

//Определяем переменную для инкремента
$i = 0;

//Перебираем массив с данными и вставляем в ячейки таблицы
foreach($data as $val)
{
$tbl .= "<tr bgcolor='". bgColorTable($i++). "'>\n";
$tbl .= "<td>". $val ."</td>\n";
$tbl .= "</tr>\n";
}

$tbl .= "</table>\n";

//Выводим сгенерированную таблицу
echo $tbl;


Мы создали функцию которая отвечает за генерацию цвета строки ячеек в таблицы. Теперь когда нам нужно в таблицу вывести зеброй мы всего лишь на всего вызываем нашу функцию. Если нужно изменить цвета, то мы лишь в одном месте меняем их , в теле функции, а не бегаем судорожно по страницам с кодом и исправляем везде. Согласитесь, удобней поменять значения параметра в одном месте, чем искать их в разных местах.


Это не весь материал о пользовательских функция, так что ждите продолжения...
PMПисьмо на e-mail пользователюICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SerginhoLD  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



че?
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 710
Пользователь №: 24500
На форуме: 6 лет, 2 месяца, 23 дня
Карма: 53




осталось только создать тему:
"Переменные для новичков, С чем едят переменные"


--------------------
"internet explorer всех правильней отображает страницы" ©
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26041
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 2 дня
Карма: 726

Не курю:
1 год, 3 месяца, 18 дней


ну эт не полная инфа... аргументы со значениями выставленные по умолчанию, переданные по ссылке, рекурсивная функция, получение аргументов функции в теле функции и т.д.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuliev  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Скорая помощь новичку
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 1508
Пользователь №: 17179
На форуме: 7 лет, 9 месяцев, 29 дней
Карма: 24




Цитата (Игорь_Vasinsky @ 27.02.2012 - 13:31)
ну эт не полная инфа... аргументы со значениями выставленные по умолчанию, переданные по ссылке, рекурсивная функция, получение аргументов функции в теле функции и т.д.

Да ты прав, это не вся инфа... Поэтому я написал в конце что буду добавлять материал. Не все сразу. Главное начать. Я думаю в дальнейшем получится не плохой материал ( конечно его потом нужно будит еще раз структурировать может даже упростить для понятности). Смысл данной стать научить новичков понимать функции.

Я когда начинал изучать PHP меня слово функция сбивала в ступор, но когда разобрался все стало понятно как божий день.
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26041
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 2 дня
Карма: 726

Не курю:
1 год, 3 месяца, 18 дней


хорошо) будем следить за апдейтами smile.gif


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Commander Keen  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Bioboosted armor
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 303
Пользователь №: 26890
На форуме: 5 лет, 9 месяцев, 28 дней
Карма: 9




Цитата
А меня массивы не взлюбили, все никак не поддаются

рассматривай их просто как "вектор-строка" в математических матрицах.
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Vladimir67  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 96
Пользователь №: 23559
На форуме: 6 лет, 4 месяца, 27 дней
Карма:




//Создаем массив с данными от 1 до 10
$data = range(1,10);

//Функция заливки таблицы
function bgColorTable($num)
{
//Первый цвет заливки строки таблицы
$bg = '#c0c0c0';

if(++$num % 2 == 0)
//Второй цвет заливки строки таблицы
$bg = '#ffffd0';

//Возвращаемый цвет заливки строки таблицы
return $bg;
}

//Рисуем саму таблицу
$tbl = "<table border='0' width='50%'>\n";

//Перебираем массив с данными и вставляем в ячейки таблицы
foreach($data as $val)
{
$tbl .= "<tr bgcolor='". bgColorTable($i++). "'>\n";
$tbl .= "<td>". $val ."</td>\n";
$tbl .= "</tr>\n";
}

$tbl .= "</table>\n";

//Выводим сгенерированную таблицу
echo $tbl;

$tbl .= "<tr bgcolor='". bgColorTable($i++). "'>\n";
Перемменная $i нигде никак не определена.
Это хорошо?


--------------------
Век живи, век учись, и все без толку.
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22759
Пользователь №: 20039
На форуме: 7 лет, 1 месяц, 8 дней
Карма: 600




Vladimir67
Это warning (Notice) smile.gif


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vital  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



int main(){printf("Hello World"); return 0;"}
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2476
Пользователь №: 20247
На форуме: 7 лет, 22 дня
Карма: 63




А закончить стоит тем, когда их(ф-и) использовать, почему процедурный код плохо и почему их заменили классами.


--------------------
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuliev  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Скорая помощь новичку
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 1508
Пользователь №: 17179
На форуме: 7 лет, 9 месяцев, 29 дней
Карма: 24




Vladimir67
Это Notice: Undefined variable: i in
Скажем так... это не критично, но лучше определить переменную (нужно заставить себя писать правильно) вот я немного поторопился wink.gif

Щас исправим этот момент!
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DiJey  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Не понимаю в чём прикол писать пример для новичков без тегов, у меня например даже запустить этот пример не получилось.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26041
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 2 дня
Карма: 726

Не курю:
1 год, 3 месяца, 18 дней


DiJey
до изучения функций - изучают основы основ - краткую историю, назначение, синтаксис, типы данных, арифм. дейс-я и т.д.

если вы начали изучать сразу с функций и не слышали что php код заключается в теги <?php & ?> - то это вопрос не к автору темы.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Joker  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Программист маньяк
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1718
Пользователь №: 17079
На форуме: 7 лет, 10 месяцев, 6 дней
Карма: 6

Трезвый :
8 лет, 12 дней


Kuliev
если уж решил писать функции для новичков то хотяб объясняй сразу что нужно определять первоначальные значения
function showNumeric()
{
//Объявляем статическую переменную
static $num;

//Инкриментируем ее
$num++;

//Возвращаем значение функции
return $num;
}

//Прогоняем вызов функции 10 раз
for ($i = 0; $i <= 9; $i++)
echo showNumeric();


отработает как надо

а если надо не сложение а умножение?) то уже будут одни нули, поэтому правильнее так:

function showNumeric()
{
//Объявляем статическую переменную
static $num = 0;

//Инкриментируем ее
$num++;

//Возвращаем значение функции
return $num;
}

//Прогоняем вызов функции 10 раз
for ($i = 0; $i <= 9; $i++)
echo showNumeric();



не рабочий пример с умножением
<?php
function
showNumeric()
{
//Объявляем статическую переменную
static $num;

//Инкриментируем ее
$num*=2;

//Возвращаем значение функции
return $num;
}

//Прогоняем вызов функции 10 раз
for ($i = 0; $i <= 9; $i++)
echo showNumeric();
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
tanner  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 5
Пользователь №: 36355
На форуме: 3 года, 11 месяцев, 21 день
Карма:




Цитата (Kuliev @ 27.02.2012 - 11:18)
Доброго времени суток всем.
Решил запостить материал по поводу пользовательских функций для новичков которые только осваивают PHP.

Весь код имеет ознакомительный характер... И не может быть использован в реальном проекте так как отсутствует защита от хулиганов :)

В любом языке программирования существуют подпрограммы. В языке C они называются функциями, в ассемблере - подпрограммами, а в Pascal существуют даже два вида подпрограмм: процедуры и функции.

Подпрограмма - это специальным образом оформленный фрагмент программы, к которому можно обратиться из любого места внутри программы. Подпрограммы существенно упрощают жизнь программистам, улучшая читабельность исходного кода, а также сокращая его, поскольку отдельные фрагменты кода не нужно писать несколько раз

В PHP такими подпрограммами являются пользовательские функции.

Помимо встроенных функций PHP, часто возникает необходимость создания пользовательских функций, выполняющих определенные задачи.


//Простая пользовательская функция
function helloWorld()
{
//Объявляем переменную типа string
$str = 'Привет мир';

//Возвращаем значение функции
return $str;
}

//Вызываем нашу функцию
echo helloWorld() .'<br>'; //Выведет Привет мир


Теперь усложним нашу функцию передав ей какой нибудь параметр


function showString($str)
{
//Возвращаем значениее функции
return $str;
}

//Нашим параметром будет строка в переменной string
$string = 'Я люблю PHP';

//Теперь вызываем нашу функцию showString
echo showString($string) .'<br>'; //Вывидет Я люблю PHP


Передавать параметры в функцию можно сколько угодно $a, $b, $n
Параметры отделяются друг от друга запятой.


//Рассмотрим пример передавая несколько параметров в функцию
function calc($a, $b)
{
//Прибовляем значения $a + $b
$result = $a + $b;

//Выводим результат
return $result;
}

echo calc(5, 5) .'<br>';//Результат = 10


Теперь давайте усложним нашу функцию и напишем простой калькулятор




function calculator($a, $b, $action)
{
//Используем конструкцию SWITCH
switch($action)
{
case "+":
$res = $a + $b;
break;

case "-":
$res = $a - $b;
break;

case "*":
$res = $a * $b;
break;

case "/":
if($a == 0 or $b == 0)
$err = 'На ноль делить нельзя';
else
$res = $a / $b;
break;
}

//Если ошибок нет то выводим результат
if(empty($err))
return $res;
else
return
$err;
}

//Проверяем была ли нажата кнопка РАССЧИТАТЬ
if(isset($_POST['submit']))
{
//Передаем аргументы функции для ее обработки
echo calculator($_POST['a'], $_POST['b'], $_POST['action']) .'<br>';
}

//Форма калькулятора
echo "
<form method='POST'>
<input type='text' name='a'><br>
<select name='action' size='1'>
<option value='+'>+</option>
<option value='-'>-</option>
<option value='*'>*</option>
<option value='/'>/</option>
</select><br>
<input type='text' name='b'><br>
<input type='submit' name='submit' value='Рассчитать'><br>
</form>"
;


И так давайте смотреть работу нашего скрипта.

У нас есть форма, есть обработчик этой формы и есть вызов обработчика формы.
Сначала мы проверяем, была ли нажата кнопка формы пользователем, для этого нам поможет функция ISSET. Если данное условие верно то выполняется действие в нутрии конструкции IF. После этого мы передаем аргументы нашей функции, а именно первое число, второе число и то действие которое выбрали из SELECT (+,-,*,/).
После того как передали аргументы функции интерпретатор возвращается на строчку где у нас описывается сама функция function calculator(); и начинает обработку полученных аргументов. Получив результат работы функции мы его возвращаем с помощью конструкции RETURN.

Инструкция GLOBAL в пользовательских функциях.


$text = 'Я люблю PHP.';

function showText()
{
//Объявляем глобальную переменную внутри тела функции
global $text;

//Начальная строка текста
$str = 'Меня зовут Вася.';

//С помощью конкатенации склеиваем наши строки в одну строку.
$str = $str .' '. $text;

return $str;
}

echo showText() .'<br>'; //Вывод - Меня зовут Вася. Я люблю PHP.


Рассмотрим функцию showText(). Данной функции не было передано ни одного аргумента, но была передана переменная из скрипта не находящегося в теле функции. Это возможно благодаря директивы GLOBAL именно она позволяет нашей функции увидеть нашу переменную за пределами нашей функции. Если бы ее не было, то мы бы получили результат функции (Меня зовут Вася.).
Надеюсь, что Вы догадались, что GLOBAL это глобальный точнее определяет что переменная у нас теперь глобальная и видна из любого места нашего скрипта. В теле функции можно объявить сколько угодно глобальных переменных через запятую global $a, $b, $n.

Инструкция STATIC в пользовательских функциях

Рассмотрим функцию showNumeric(). В теле данной функции находится статическая переменная $num данная переменная видна только в теле функции. Вы спросите в чем разница данной переменной от просто переменной в теле функции ведь их тоже не видно за пределами функции.


function showNumeric()
{
//Объявляем статическую переменную
static $num;

//Инкриментируем ее
$num++;

//Возвращаем значение функции
return $num;
}

//Прогоняем вызов функции 10 раз
for ($i = 0; $i <= 9; $i++)
echo showNumeric();


Давайте рассмотрим пример действия функции с данной переменной.
Результат данных действия будет разный.
В первом варианте функция выведет нам 1 2 3 4 5 6 7 8 9 10
Если убрать директиву STATIC то результат работы функции будет такой 1 1 1 1 1 1 1 1 1 1.
Это связано с тем что переменная после вызова функции в цикле обнуляется.

Пользовательские функции параметры по умолчанию

Параметры по умолчанию – это когда вы определяете переменную как аргумент функции в функции для дальнейшей обработки параметров.
Простой пример:

//Функция с параметром по умолчанию
function varDefault($num = 10)
{
//Возвращаем значение
return $num;
}

//Проверяем ЕСЛИ функция возвращает 10 ТО выводи сообщение что функция вернула 10
if(varDefault() == 10)
echo 'Функция вернула число 10 <br>';
else
echo 'Функция не равна 10 <br>';

//ВЫВЕДЕТ: Функция вернула число 10

//А если написать так

if(varDefault(5) == 10)
echo 'Функция вернула число 10 <br>';
else
echo 'Функция не равна 10 <br>';

//ВЫВЕДЕТ: Функция не равна 10


Давайте разбираться по чему так происходит. Дело в том что мы задали параметр по умолчанию равному 10, согласно нашему первому условию он верно (ИСТИНА), что и демонстрирует эта часть кода. Второй части кода мы заменяем параметр нашей функции на 5 и тогда наше условии не выполняется (ЛОЖЬ).

Возможно с первого не понять для чего это вообще нужно и где это можно применить. Давайте попробуем смоделировать ситуацию, создадим функцию которая будет выводить меню на сайте (по умолчанию пользователя, если нужно то админа.


//Создаем массив ссылок
$link = array(
'Главная' => 'index.php',
'Новости' => 'news.php',
'О нас' => 'about.php',
'Форум' => 'forum.php'
);

//Определяем константы для формирования путей для ссылок
define('ADMIN_MENU', '/admin/');
define('HOST', 'http://'.$_SERVER['HTTP_HOST']);

function menu($link, $flag = false)
{
//Создаем пустой массив для с генерированых ссылок
$arr_link = array();

//Проверяем какое будет меню (ПОЛЬЗОВАТЕЛЬ / АДМИН)
if($flag === true)
$menu = ADMIN_MENU;
else
$menu = '/';

//Перебераем массив с данными для ссылок
foreach($link as $k => $v)
//Записываем все ссылки в массив
$arr_link[] = "<a href='".HOST.$menu.$v."'>". $k ."</a>\n";

//Возвращаем ссылки в виде массива
return $arr_link;
}

//Выводим результат работы скрипта (меню)
echo join('<br>', menu($link)) ."<br><br>\n"; //Меню ПОЛЬЗОВАТЕЛЯ
echo join('<br>', menu($link, true)) ."<br>\n"; //Меню АДМИНА


Если мы не передаем второй аргумент функции, то параметр функции остается по умолчанию, если мы укажем второй параметр TRUE, то выведем меню админа, так как мы изменили параметр по умолчанию.

Это всего лишь пример как можно применить параметр в функции по умолчанию, все зависит от вашей фантазии.

Таблица – ВЫВОД ЗЕБРОЙ (функция для новичка)

Довольно часто форумчане, особенно новички спрашиваю, как вывести таблицу зеброй. Вот как раз на этом примере я вам покажу удобства работы с пользовательскими функциями.

//Создаем массив с данными от 1 до 10
$data = range(1,10);

//Функция заливки таблицы
function bgColorTable($num)
{
//Первый цвет заливки строки таблицы
$bg = '#c0c0c0';

if(++$num % 2 == 0)
//Второй цвет заливки строки таблицы
$bg = '#ffffd0';

//Возвращаемый цвет заливки строки таблицы
return $bg;
}

//Рисуем саму таблицу
$tbl = "<table border='0' width='50%'>\n";

//Определяем переменную для инкремента
$i = 0;

//Перебираем массив с данными и вставляем в ячейки таблицы
foreach($data as $val)
{
$tbl .= "<tr bgcolor='". bgColorTable($i++). "'>\n";
$tbl .= "<td>". $val ."</td>\n";
$tbl .= "</tr>\n";
}

$tbl .= "</table>\n";

//Выводим сгенерированную таблицу
echo $tbl;


Мы создали функцию которая отвечает за генерацию цвета строки ячеек в таблицы. Теперь когда нам нужно в таблицу вывести зеброй мы всего лишь на всего вызываем нашу функцию. Если нужно изменить цвета, то мы лишь в одном месте меняем их , в теле функции, а не бегаем судорожно по страницам с кодом и исправляем везде. Согласитесь, удобней поменять значения параметра в одном месте, чем искать их в разных местах.


Это не весь материал о пользовательских функция, так что ждите продолжения...


Kuliev:

Теперь усложним нашу функцию передав ей какой нибудь параметр
[ code]
function showString($str)
{
//Возвращаем значениее функции
return $str;
}

//Нашим параметром будет строка в переменной string
$string = 'Я люблю PHP';

//Теперь вызываем нашу функцию showString
echo showString($string) .'<br>'; //Вывидет Я люблю PHP
[ /code]

мне как новичку непонятно: $str == $string ; ??
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
v79.08  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Всем доброго времени суток.помогите мне пожалуйста? я только учусь пока и с php ещё почти не знаком.вот такая сетуация сложилась:
при отправке сообщения с сайта из формы обратной связи , мне надо зделать запесь всего отправленного сообщения (массива) в текстовый файл
текстовый файл будет находица тамже где и файл самой страници с формой.я смог получить и вывести следующию строку:


Array ( [FIRESTNAME] => Валера [email] => v79.08@mail.ru [telefon-num] => 89209847401 [dom-adress] => Сасово [subject] => zacaz [captcha] => [message] => просьба просто выбрать нужный <соответствующий> вашему сообщению пункт в форме. )

теперь мне надо её запесать в текстовый файл. Метод отправки сообщения POST , кодировка utf-8 , синтаксис php.
вот строка из формы: (<form action="request.php" method="post" enctype="multipart/form-data">)
при помощи файла request.php я вывел стоку.
вот што написано у меня в файле: <?php
print_r($_POST);
$file = fopen("a.txt", "a+t");
?>
и всё вроде хорошо и файл создаёца и строка выводеца. а вот добаветь строку в текстовый фыйл и сохронить её там я немогу.подскажите пожалуйста што нужно допесать ещё?
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) [1] 2 3  Ответ в темуСоздание новой темыСоздание опроса