[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Возрат переменной из функции
Игорь_Vasinsky
Вообщем то решил для себя функцию пагинатора сделать, по тпа гугла, и чтоб при интеграции минимум усилий.

Всю функцию выкладывать не буду пока, вот кусок чтоб понятно было что мне нужно:


/*
Аргументы
$countStrings - integer (кол-во строк на странице)
$showLinks - integer (колво ссылок в пагинаторе)
$nameTable - string
*/

function getNavigation($countStrings, $showLinks, $nameTable)
{
//body
}

вызов так:

getNavigation("5", "11", "test");


И соответсвенно при выводе таблицы я бы хотел использовать вот такой синтаксис:

$query = mysql_query("SELECT * FROM `test` ORDER BY `id` ASC LIMIT ".$start.",".$countStrings);


$start объявлена глобальной

а вот $countStrings (не могу увеличить область видимости)



Спустя 4 минуты, 1 секунда (25.04.2011 - 20:46) neadekvat написал(а):
function getNavigation(&$countStrings, &$showLinks, $nameTable)
{
// body
}

$countStrings = 5;
$showLinks = 11;
$nameTable = 'test';
getNavigation($countStrings, $showLinks, $nameTable);

Спустя 3 минуты, 12 секунд (25.04.2011 - 20:49) Игорь_Vasinsky написал(а):
neadekvat
хотел до минимума минимизировать...

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

getNavigation("5", "11", "test");



Спустя 3 минуты, 4 секунды (25.04.2011 - 20:52) neadekvat написал(а):
Так:
function getNavigation($nameTable)
{
global $countStrings, $showLinks;
// body
}

getNavigation(5, 11, 'test');

Спустя 3 минуты, 58 секунд (25.04.2011 - 20:56) Игорь_Vasinsky написал(а):
если объявляю глобальной $countStrings до первого использования этой перемнной в теле то получаю:

Division by zero, настроке где первый раз вызвал переменную.

если после, то она не попадает в глобальнй массив.

вот я и парюсь, и ретурн не возвращает...

Спустя 2 минуты, 24 секунды (25.04.2011 - 20:58) neadekvat написал(а):
Вот сейчас не догнал.
Придется таки показывать код, вызывающий ошибку.
К слову, Division by zero значит "деление на ноль". Что в обычной алгебре типа запрещено.

Спустя 10 минут, 6 секунд (25.04.2011 - 21:08) neadekvat написал(а):
А ведь я в своем примере убрал из аргументов функции те переменные, которые будут объявлены глобальными.

Спустя 3 минуты, 49 секунд (25.04.2011 - 21:12) Игорь_Vasinsky написал(а):
ТОКА ЩАС ЗАМЕТИЛ,

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

getNavigation(5, 11, 'test');


Спустя 1 минута, 8 секунд (25.04.2011 - 21:13) neadekvat написал(а):
Еще раз на этот пост глянь.
И, да, global используй только в первых строчках в теле функции. Если бы я не знал, что он есть где-то в середине кода - заметил бы нескоро.

Спустя 5 минут (25.04.2011 - 21:18) Игорь_Vasinsky написал(а):
Убрал из аргументов, объявил глобальными до первого вызова (в начале функции)

и снова получил деление на ноль

Спустя 2 минуты, 36 секунд (25.04.2011 - 21:21) neadekvat написал(а):
Пожалуй, переменная должна быть объявлена до того, как будет объявлена функция.

Но теперь оторвемся от кода и обратимся к логике.

Итак, тебе надо, чтобы переменные $countStrings, $showLinks были доступны вне функции, после ее вызова?

Спустя 3 минуты, 3 секунды (25.04.2011 - 21:24) Игорь_Vasinsky написал(а):
$showLinks - нет, она последний раз дергается как аргумент функции и всё.

а вот $countStrings, я хочу использовать как переменную при вывде таблицы

#ВЫВОД ТАБЛИЦЫ         
$query = mysql_query("SELECT * FROM `test` ORDER BY `id` ASC LIMIT ".$start.",".$countStrings);

Спустя 1 минута, 56 секунд (25.04.2011 - 21:26) neadekvat написал(а):
Значит, $countStrings объявляй заранее и передавай по ссылке.

function getNavigation(&$countStrings, $showLinks, $nameTable)
{
// body
}

$countStrings = 5;
getNavigation($countStrings, 11, 'test');

Спустя 5 минут, 33 секунды (25.04.2011 - 21:31) Игорь_Vasinsky написал(а):
Цитата
Значит, $countStrings объявляй заранее и передавай по ссылке.


тогда я уж объявлю её консантой и уберу из аргументов, но тогда юзеру придётся дописывать её значение ручками здесь:

#ВЫВОД ТАБЛИЦЫ         
$query = mysql_query("SELECT * FROM `test` ORDER BY `id` ASC LIMIT ".$start.", 11");



но не так (ссылочный вариант), не этот - не очень уютны... :(

Спустя 5 минут, 21 секунда (25.04.2011 - 21:37) sergeiss написал(а):
Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:07)
function getNavigation($countStrings, $showLinks, $nameTable)
{

#Имя таблицы в БД, которая "постранично будет выводиться"
$nameTable= "test";
global $countStrings, $showLinks;

Вот тут у тебя "собака порылась" где-то. Ты одновременно объявляешь и локальные переменные (как аргументы функции) и глобальные с одним и тем же именем. Я не хочу гадать, что же тут происходит, но я уверен, что проблема в этом.
В любом случае надо сделать разные имена переменным.

А еще лучше - убери глобалы и сделай передачу по ссылке. Как тебе уже несколько раз в теме сказали.

Спустя 8 минут, 27 секунд (25.04.2011 - 21:45) Игорь_Vasinsky написал(а):
sergeiss
Цитата
Вот тут у тебя "собака порылась"


а вот и нет wink.gif

я показал как я объявил после поправки neodekvata,

но далее когда я объявил их глобальными - то из аргументов я убрал, но ошибка осталась, я просто цель посавил для себя:

вызов функции одной строкой (3 аргумента)

Спустя 2 минуты, 34 секунды (25.04.2011 - 21:48) neadekvat написал(а):
Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:45)
я просто цель посавил для себя:

Кхм.. Мягко говоря, глупо. Кому и зачем это нужно, если такая логика скрипта повлечет к переходу на сторону БДСМа?

Спустя 5 минут, 15 секунд (25.04.2011 - 21:53) Игорь_Vasinsky написал(а):
логика вроде нормальная, меня алгоритмы учили писать ещё в школе, на бейсике wink.gif

Ты вот предложил использовать глобальные переменный, убирая их из аргументов - не вшло... почему?

Щас пробую вариант с аргументом по умолчанию..хз

Спустя 4 минуты, 46 секунд (25.04.2011 - 21:58) Игорь_Vasinsky написал(а):
гы... по умолчанию тож не вышло...

p/s: да, знаю что правее все аргумнтов

Спустя 8 минут, 19 секунд (25.04.2011 - 22:06) Игорь_Vasinsky написал(а):
нет вариантов?

Спустя 48 секунд (25.04.2011 - 22:07) neadekvat написал(а):
Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:53)
логика вроде нормальная, меня алгоритмы учили писать ещё в школе, на бейсике

Я про логику скрипта, а не про твою логику smile.gif

Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:53)
Ты вот предложил использовать глобальные переменный, убирая их из аргументов - не вшло... почему?

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

Спустя 6 минут, 30 секунд (25.04.2011 - 22:13) Игорь_Vasinsky написал(а):
следовательно и возврат функция не может сделать... но тогда я въехать не могу почему я не могу объявить значение для этого аргумента по умолчанию...

т.е. опять тупик, если есть аргумент по умолчанию, опять же его уже не глобаллизировать?

Спустя 7 минут, 5 секунд (25.04.2011 - 22:21) neadekvat написал(а):
$countStrings = 5;

function getNavigation($showLinks, $nameTable)
{
global $countStrings;
// body
}

getNavigation(11, 'test');

Спустя 2 минуты, 2 секунды (25.04.2011 - 22:23) Игорь_Vasinsky написал(а):
neadekvat
не не... всё, принял решение, при выводе из бд эту переменную не использовать, а в функцию комменты написал, как использовать. спасиб.

Спустя 1 минута, 47 секунд (25.04.2011 - 22:24) sergeiss написал(а):
Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:45)
но далее когда я объявил их глобальными - то из аргументов я убрал, но ошибка осталась, я просто цель посавил для себя:

вызов функции одной строкой (3 аргумента)

Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:53)
логика вроде нормальная, меня алгоритмы учили писать ещё в школе, на бейсике

Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:53)
Ты вот предложил использовать глобальные переменный, убирая их из аргументов - не вшло... почему?

Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:53)
Щас пробую вариант с аргументом по умолчанию..хз

Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:58)
гы... по умолчанию тож не вышло...

Цитата (Игорь_Vasinsky @ 25.04.2011 - 22:58)
p/s: да, знаю что правее все аргумнтов

Цитата (Игорь_Vasinsky @ 25.04.2011 - 23:06)
нет вариантов?


Если честно, то это воспринимается как просто поток сознания. Безо всякой мысли. Ты пишешь что-то там, "кодишь". Сам с собою говоришь. Делаешь ошибки, но их не видишь. И не показываешь на форуме, что же ты там делаешь. При этом ты не делаешь то, что тебе советуют...

Вопрос: а нахрена тогда ты вообще программированием занимешься-то???

Спустя 17 минут, 13 секунд (25.04.2011 - 22:42) Игорь_Vasinsky написал(а):
sad.gif злой ты... а в соседней теме похвалил почти...

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

Спустя 5 минут, 28 секунд (25.04.2011 - 22:47) sergeiss написал(а):
Я - злой??? Нет, я честный smile.gif Если ты способен это понять, то тогда это пойдет тебе на пользу. А если кто-то другой не поймет, то это будут его проблемы, проблемы его непонимания smile.gif

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

Спустя 6 минут, 5 секунд (25.04.2011 - 22:53) Игорь_Vasinsky написал(а):
я н сколько раз указывал что ошибка - деление на ноль..
сам частенько бешусь что спрашивая не показывают ни кода ни ошибок.

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

лан, путём всё. ещё на результаты конкурса надоб чтобы малость самооценки осталось wink.gif

Спустя 9 минут, 35 секунд (25.04.2011 - 23:03) sergeiss написал(а):
Вот смотри, еще раз повторю.

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

То, что там "деление на ноль" - вполне возможно. Но ты сначала код смени и покажи, какой он стал. Может быть, там еще что-то неверное осталось/появилось?

И к самооценке это не должно иметь никакого отношения smile.gif Чисто рабочие моменты.

Спустя 3 минуты, 50 секунд (25.04.2011 - 23:07) Игорь_Vasinsky написал(а):
учту.
и потом, я уже решение принял, может малость не такое, какое искал, но ближе чем предложенные.
Но за участие всем спасибо. И опыт приходит с годами и с практикой.


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.