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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать свою суперглобальную переменную? 
V
    Опции темы
animegirl
Дата 18.3.2013, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ясно, значит $_GLOBALS


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


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



animegirl, а чем тебе не понравился мой класс? Это и есть "глобальная переменная"  smile 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
animegirl
Дата 18.3.2013, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Gold Dragon, Я пока, что до классов не доросла, пытаюсь избегать этого типа программирования, пока не прижмёт, а нето будет как всегда, сначала не понимаешь и злишься, а потом нравится и убиваешь уйму времени, чтоб всё переделать на новый лад.


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


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



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


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 18.3.2013, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(animegirl @  18.3.2013,  07:30 Найти цитируемый пост)
а нето будет как всегда, сначала не понимаешь и злишься, а потом нравится и убиваешь уйму времени, чтоб всё переделать на новый лад. 

А сейчас будет не так?  smile Только переписывать придется больше, так больше успеешь написать


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
MoLeX
Дата 18.3.2013, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

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



мне больше нравится использовать возможности 5.4 и без использования классов
Код

<?php
function GL( $key = null, $value = null )
{
    static $global = array();

    if( $key === null )
        return $global;

    if( $value === null )
        return $global[$key];

    if( $value != null )
        $global[$key] = $value;
}
;

function mytest()
{
    GL( 'array', array( 'key' => 'value' ) );
}

GL( 'var1', '1' );
GL( 'var2', '2' );
GL( 'var3', '3' );
mytest();

echo '<pre>';
var_dump( GL() );
var_dump( GL( 'var1' ) );
var_dump( GL()['var1'] );
var_dump( GL()['array']['key'] );


для версии ниже 5.4 последние два способа будут не доступны (GL()['var1'], GL()['array']['key'])


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
IgorIV
Дата 18.3.2013, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(animegirl @ 17.3.2013,  21:42)
Да надоело в каждой функции прописывать список всего что надо, чисто эстетический вид и простота в чтение кода.

Да там одно и тоже, что с подчёркиванием, что без него, нужно ставить модуль, а он не встанет на новый ПХП, а разрабочица этого модуля забила на ПХП так как ушла работать в файсбук :(

Я так думаю, что надо привести пример функции которая показывает " список всего, что надо". Может ошибка в подходе?
А вот про модуль не понял
PM MAIL   Вверх
animegirl
Дата 19.3.2013, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ситуация, такова, у меня на каждую функцию проекта, свой ПХП файл.
Есть 2-3 файла инклуда с основными функциями и вариаблами.
Функции очень сильно перемешаны друг с другом, каждый раз для вызова, чего-то нового, нужно передавать кучу вариабл,. Если я хочу добавить новую вариаблу, то мне приходится в каждом из 100+ ПХП файлов добавить эту вариаблу к вызовам функции, хотя её спокойно, можно создать в обработки другой функции, и оставить в глобальных. Я сейчас перешла на $GLOBALS, минут за 30 перевела все скрипты на новый способ общения, и в принципе очень даже рада. Вносить изменения стало намного легче.

По поводу модуля. Модуль упомянутый выше runkit писался девушкой для PHP, но она перестала его обновлять, так как её утянули работать в фэйсбук, последния версия модуля датируется 2006ым годом, и он не работает с PHP 5.2+ :(


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


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(animegirl @  19.3.2013,  17:05 Найти цитируемый пост)
Ситуация, такова, у меня на каждую функцию проекта, свой ПХП файл.
Есть 2-3 файла инклуда с основными функциями и вариаблами.
Функции очень сильно перемешаны друг с другом, каждый раз для вызова, чего-то нового, нужно передавать кучу вариабл,. Если я хочу добавить новую вариаблу, то мне приходится в каждом из 100+ ПХП файлов добавить эту вариаблу к вызовам функции, хотя её спокойно, можно создать в обработки другой функции, и оставить в глобальных. Я сейчас перешла на $GLOBALS, минут за 30 перевела все скрипты на новый способ общения, и в принципе очень даже рада. Вносить изменения стало намного легче.

 smile  smile  smile 
PM MAIL WWW ICQ Skype   Вверх
Fortop
Дата 19.3.2013, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(animegirl @  19.3.2013,  16:05 Найти цитируемый пост)
Функции очень сильно перемешаны друг с другом, каждый раз для вызова, чего-то нового, нужно передавать кучу вариабл,.

Это указывает на ошибку в разработке самих функций.

Выделение кода в функцию производится по двум признакам - повторяемость и специализация.
Т.е. выделяемый код должен выполнять некие специализированные действия и/или повторятся неоднократно

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

Это сообщение отредактировал(а) Fortop - 19.3.2013, 17:08


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


Опытный
**


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

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



animegirl,  как вы там пишете?  smile 
smile
PM MAIL   Вверх
animegirl
Дата 19.3.2013, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



IgorIV
script.php
Код

<?
require_once '../inc/stats.inc';
$GLOBALS['script_name'] = basename(__FILE__,'.php');
...


stats.inc
Код

<?
$GLOBALS['start_time'] = microtime(TRUE);
function stop_timer()
    {
    $GLOBALS['run_time'] = microtime(TRUE) - $GLOBALS['start_time'];
    }

function write_log()
    {
    $main_path = substr(dirname(__FILE__),0,-3);
    if($GLOBALS['script_name'])
        {
        stop_timer();
        if(!file_exists($main_path.'stats/runtime/'.$GLOBALS['script_name']) AND is_writable($main_path.'stats/runtime'))
            {
            mkdir($main_path.'stats/runtime/'.$GLOBALS['script_name']);
            }
        $filename = $main_path.'stats/runtime/'.$GLOBALS['script_name'].'/'.@date('d.m.y_H.i.s').'.log';
        if(!file_exists($filename) OR is_writable($filename))
            {
            if($handle = @fopen($filename, 'a'))
                {
                @fwrite($handle,$GLOBALS['run_time']."\n");
                @fclose($handle);
                }
            }
        }
    }

register_shutdown_function('write_log');
?>

Это часть кода, часть функции write_log, вариабла $GLOBALS['run_time'] ещё используется там не однократно.
Это один из примеров, не хочется без надобности постить сюда кучу своего кода smile


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


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


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

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



Другой пример (без кода).
У меня используются несколько разных соединений с базой, отправка запросов делается через 2 разные функции, каждая из которых:
1. Проверяет существует ли уже соединение для её типа, если нет создаёт
2. Отправляет sql запрос по правильному каналу, если запрос не проходит создаёт репорт ошибки в файл

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


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


Эксперт
****


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

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



Цитата(animegirl @  19.3.2013,  18:15 Найти цитируемый пост)
$GLOBALS['script_name'] = basename(__FILE__,'.php');

меняем на такой код в  write_log();

Код

<?php
$trace = debug_backtrace();
echo reset($trace)['file'];


можно даже на такое
Код

<?php
$trace = debug_backtrace();
echo $trace[0]['file'];


Что мы имеем? Теперь нам неважно установлена ли $GLOBALS['script_name'] в вызывающем скрипте и правильно ли она установлена. Мы сами можем узнать откуда нас - write_log() вызвали.


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


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


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

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



Fortop
Код

$trace = debug_backtrace();
echo reset($trace)['file'];

выдаёт
Код

Parse error: syntax error, unexpected '[', expecting ',' or ';' in ....


Код

$trace = debug_backtrace();
echo $trace[0]['file'];

выдаёт
Код

Notice: Undefined index: file in ...



--------------------
Скажи миру - НЯ!
PM   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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