Перейти к содержимому


Партнерская программа Kredov

Переменная в функции доступна в основной программе

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 16 Февраль 2010 - 10:08

как сделать чтоб значение переменной в функции было доступно для работы в основной программе

 

 

  • 0

#2 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 16 Февраль 2010 - 13:32

Вам, наверное, сюда: Глобальные переменные в PHP


  • 0

#3 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 16 Февраль 2010 - 20:49

sc2r2bey, а что вам мешает вернуть значение из функции и занести её в переменную вне функции. И работайте себе с ней в основной программе.
Как говорил наш преподаватель по Системному Программированию - глобальные переменные - это ЗЛО. Знаешь как нарушается читаемость твоей программы? Просто ужасно, особенно если подобных переменных много.

Так что, лучше структурируйте правильно программу. Не надо никаких глобальных переменных внутри функций.
  • 0

#4 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 18 Февраль 2010 - 15:11

как это в коде выглядит?
  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Февраль 2010 - 17:14

sc2r2bey, что именно? Если ты про возвращаемые значения, то так:
<?php

// начало кода основной программы

/* определение функции суммы 3 параметров */
function mySumma($param1 = 0, $param2 = 0, $param3 = 0)
{
$temp = 0; // объявляем и определяем локальную переменную в функции
$temp = $param1 + $param2 + $param3; // суммируем все переданные 3 параметра

return $temp; // возвращаем результат из функции
}

// продолжение кода основной программы

/* вызываем функцию и получаем из неё значение */
$result = mySumma(); // вернет в $result - 0
$result = mySumma(1); // вернет в $result - 1
$result = mySumma(1,1); // вернет в $result - 2
$result = mySumma(1,2,3); // вернет в $result - 6

// конец кода основной программы

?>

Вообщем как видишь, функция у нас получает на входе параметры (какие либо данные для обработки), а на выходе мы имеем результат (функция возвращает результат).

Если вспомнить простейшую математику, нашу функцию можно записать так:
Y = F(x1,x2,x3)
где, в нашем случае:
Y - переменная для хранения результата $result
F - имя функции (к примеру в математике это cos, sin, tg, Im, Re и т.д.)
x1 - первый входной параметр $param1
x2 - второй входной параметр $param2
x3 - третий входной параметр $param3
Функция, зависящая от трех параметров. Если что-то не понятно, спрашивай.
  • 0

#6 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 11 Март 2010 - 13:40

а только так можно?

/* вызываем функцию и получаем из неё значение */
$result = mySumma(); // вернет в $result - 0
$result = mySumma(1); // вернет в $result - 1
$result = mySumma(1,1); // вернет в $result - 2
$result = mySumma(1,2,3); // вернет в $result - 6

  • 0

#7 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 11 Март 2010 - 19:42

Так так и есть, просто там еще показано, как функция задается. Она же из воздуха не возьмется. А глобальные переменные если начнут пересекаться и путаться, найти ошибку будет очень сложно. Лучше возвращать.
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Март 2010 - 20:25

sc2r2bey, есть возможность передавать переменные не по значению, а по ссылке, тогда при изменении переменной в функции, значение изменится и вне функции. Передача переменной по ссылке осуществляется ростановкой при передачи знака & перед переменной. Пример:
<?php


/* определение функции */
function myFunc($param)
{
$param++; // прибавляем к переменной единицу
// функция ничего не возвращает
}

$i = 0;

/* вызываем функцию и передаем переменную по ссылке */
myFunc(&$i);
echo $i; // 1

/* вызываем функцию и передаем переменную по ссылке */
myFunc(&$i);
echo $i; // 2

/* вызываем функцию и передаем переменную по значению */
myFunc($i);
echo $i; // 2 (значение не изменилось)

?>

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru