Модераторы: 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   Вверх
Gromdron
Дата 13.6.2013, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может я конечно не в тему, но зачем изобретать велосипед ?
Разве не для этого придумали кеширование переменных ?


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Arantir
Дата 13.6.2013, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Gromdron @  13.6.2013,  13:59 Найти цитируемый пост)
Разве не для этого придумали кеширование переменных ?

Да нет, просто суть темы в том, что ТС не хочет переписывать кучу скриптов. Ведь если бы хотела, то бы сделала свой класс с геттерами и сеттерами и этой темы бы не было =)


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


Новичок



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

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



Цитата ('Arantir')

   Да нет, просто суть темы в том, что ТС не хочет переписывать кучу скриптов.
   


И через полгода - год вырастить монстра ?  

ИМХО лучшей сейчас потратить время на НУЖНУЮ вещь и получить профит, чем потом пытаться его оживить.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Arantir
Дата 15.6.2013, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Gromdron @  15.6.2013,  06:05 Найти цитируемый пост)
ИМХО лучшей сейчас потратить время на НУЖНУЮ вещь и получить профит, чем потом пытаться его оживить.
Ну именно то, что хотела ТС, сделать все равно невозможно. Так что, что-то решать все равно придется - не забывать вызывать функции или все переделать. В любом случае - я ей не начальник, чтобы заставлять делать что-то конкретное.
Не всегда есть время, чтобы глобально что-то переделывать. 


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


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


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

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



Arantir, 763 замены, заменила вызов переменной вызовом функции. Но кроме лени, реально был интерес грани возможного


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


Эксперт
****


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

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



Ну не вручную же меняла, регулякой? ;)
PM MAIL   Вверх
animegirl
Дата 20.6.2013, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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


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


Эксперт
****


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

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



Цитата(animegirl @  20.6.2013,  22:50 Найти цитируемый пост)
Вручную для меня быстрее чем вспоминать правила регулярок.

 smile 


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


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


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

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



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


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


Эксперт
****


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

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



Цитата(animegirl @  24.6.2013,  19:24 Найти цитируемый пост)
 не знаю как менять регулярками когда данные разбросанные в полутра сотни файлах.

Netbeans

открываем проект
Ctrl-H

user posted image
и вперед


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


Эксперт
****


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

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



Цитата(Fortop @  24.6.2013,  23:22 Найти цитируемый пост)
Netbeans

animegirl, не только в средах разработки, но и просто в приличных редакторах есть замена по регулярному выражению в файлах.
notepad++ например.
не могу не поинтересоваться, в чем ТС редактирует код?
PM MAIL   Вверх
animegirl
Дата 27.6.2013, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



baldina,  KATE


--------------------
Скажи миру - НЯ!
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0681 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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