Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена вариаблы из фунцкии внутри этой самой вариа 
V
    Опции темы
animegirl
Дата 11.6.2013, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Задача:
Инициализировать значение вариаблы при первом обращение к ней, не вызывая функцию напрямую до обращения вывода.

Код который есть
Код

$GLOBALS['var'] = function()
    {
    return my_function();
    }

function my_function()
    {
    echo 'check';
    $var = 'x';
    $GLOBALS['var'] = $var;
    return $var;
    }

print_r($GLOBALS['var']);
print_r($GLOBALS['var']);
print_r($GLOBALS['var']);
print_r($GLOBALS['var']);

но он не работает, так как в $GLOBALS['var'] записывается сама функция, а не её результат или вызов.

Код сверху должен по поставленой задачи выдать строку "checkхххх", если убрать все print_f, тогда не выдать ничего.


--------------------
Скажи миру - НЯ!
PM   Вверх
krypt3r
Дата 11.6.2013, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 3
Всего: 16



Вызовы функции обычно заканчиваются круглыми скобками.
PS. Г-код детектед
PM MAIL   Вверх
animegirl
Дата 11.6.2013, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



krypt3r, Всё верно, но вариблы нет, а так как вызываться должно одно и тоже много раз, нужно, чтоб вариабла была само запускаемой функцией - как это сделать?


--------------------
Скажи миру - НЯ!
PM   Вверх
Arantir
Дата 11.6.2013, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Совсем непонятно, чего Вы хотите. 
Какую задачу Вы пытаетесь решить? Задачу с практичной целью, а не то, что в первом посте. Возможно, хоть станет понятнее, почему Вы решили поступить так, как описали.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
animegirl
Дата 11.6.2013, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



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

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

Для меня такой подход является наиболее оптимальным, и я хочу в теории понять, как можно сделать такую фишку  smile 


--------------------
Скажи миру - НЯ!
PM   Вверх
baldina
Дата 11.6.2013, 16:22 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



вариабла... где слов то таких нахватались
тут пороть надо, а не переубеждать  smile

по теме:
Код

function get () {
 static $val=null;
 return isset ($val) ? $val : $val=init ();
}


Это сообщение отредактировал(а) baldina - 11.6.2013, 16:37
PM MAIL   Вверх
Sanchezzz
Дата 11.6.2013, 17:04 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Ошибка будит так не крути "check Fatal error: Cannot destroy active lambda function" так как не успевает анонимная функция отработать, как мы пытаемся ее грохнуть.  smile 



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
animegirl
Дата 11.6.2013, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Sanchezzz, Печалько, насколько ненавижу яваскрипт, но возможность такого рода извращений там мне нравится.


--------------------
Скажи миру - НЯ!
PM   Вверх
Fortop
Дата 11.6.2013, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(animegirl @  11.6.2013,  17:06 Найти цитируемый пост)
но возможность такого рода извращений там мне нравится. 


baldina, вам уже дал пример


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Arantir
Дата 11.6.2013, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(animegirl @  11.6.2013,  15:16 Найти цитируемый пост)
Да бы тема не скатывалась в переубеждение сделать по другому, давайте продержимся рассмотрения данной задачи

Разве что оно изначально тщетно...

Прописывая 
Код

$GLOBALS['var']
Вы указываете языку ни что иное, как получить значение этой переменной. Просто превратить его в вызов функции нельзя. Чтобы вызвать функцию, то надо писать:
Код

$GLOBALS['var']()
но это же противоречит Вашей задаче.

Если бы это было пользовательским классом, то можно было бы переопределить __get() и делать при обращении к значению что угодно. Но с глобальным встроенным массивом это не прокатит.

Как минимум придется смирится со скобками. Тогда можно сделать так:
Код

$GLOBALS['var'] = function()
    {
        static $result = null;
        if (is_null($result ))
            $result = my_func();
        return $result;
    };

function my_func()
{
    echo "my_func called\n";
    // ...
    return "result\n";
}

print_r($GLOBALS['var']());
print_r($GLOBALS['var']());
print_r($GLOBALS['var']());
print_r($GLOBALS['var']());
Код


my_func called
result
result
result
result


Добавлено через 11 минут и 13 секунд
Цитата(animegirl @  11.6.2013,  15:16 Найти цитируемый пост)
как это записано в описание раздела "Теоретический форум касающийся поиска наиболее рациональных и оптимальных решений при программировании конкретных задач, а также общие принципы работы с PHP"

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


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
animegirl
Дата 12.6.2013, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Arantir, предлагаю мировую на соединительном слове "а также" ;)

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


--------------------
Скажи миру - НЯ!
PM   Вверх
Fortop
Дата 12.6.2013, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(animegirl @  12.6.2013,  19:48 Найти цитируемый пост)
интересно, когда будет обратное, чтоб яваскрипт хаки на ПХП начали переводить

Это ненужно
Вы можете использовать javascript напрямую в php
http://php.net/manual/en/book.v8js.php



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
animegirl
Дата 12.6.2013, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Fortop, Стоп, но ведь если в яваскриптах есть само запускающиеся переменные-функции, и есть такая библиотека, то можно теоретический всё-таки впихнуть невпихуемое или?


--------------------
Скажи миру - НЯ!
PM   Вверх
Fortop
Дата 13.6.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(animegirl @  12.6.2013,  22:38 Найти цитируемый пост)
то можно теоретический всё-таки впихнуть невпихуемое или? 

Я же не знаю какое извращение ты хочешь сделать.

В любом случае вызов js будет выглядеть сложнее чем пример от baldina.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
baldina
Дата 13.6.2013, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



animegirl, в яваскрипте нет самозапускающихся переменных. Возможность хранить в переменной функцию есть в обоих языках, и в обоих ее придется вызвать явно (php в этом смысле может оказаться интереснее за счет магических функций)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.