Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 10 из 10

Тема: static const

  1. #1
    Аватар для kushichka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.04.2014
    Сообщений
    75
    Репутация:
    6 ±

    static const

    В чем разница использование конструкции
    PHP код:
    static const  example
    и
    PHP код:
    static example
    ?

    Слышал что static const нельзя использовать для запросов в бд, но static работает в этом случае ничем не хуже предыдущего варианта. Так а в чем тогда разница? Прочитал описание обеих видов переменных и особо не нашел различий, что то константа, что другое.

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Ключевое слово const используется для обозначения того, что эта переменная не будет изменяться.

    PHP код:
    static const  example;
    example 2// ошибка 
    PHP код:
    static example;
    example 2// всё ок 

  3. #3
    Аватар для kushichka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.04.2014
    Сообщений
    75
    Репутация:
    6 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Ключевое слово const используется для обозначения того, что эта переменная не будет изменяться.

    PHP код:
    static const  example;
    example 2// ошибка 
    PHP код:
    static example;
    example 2// всё ок 
    а если записать
    PHP код:
    const  example
    то эту переменную можно изменить, и в следующий раз она примет последнее значение?

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от kushichka Посмотреть сообщение
    а если записать
    PHP код:
    const  example
    то эту переменную можно изменить, и в следующий раз она примет последнее значение?
    Не знаешь о том, что такое константы что ли? Константе задаётся значение только при объявлении и больше его никак изменить нельзя. Это "static" делает локальную переменную, по сути, глобальной и такая переменная сохраняет значение даже после того, как функция, в которой была объявлена такая переменная, была обработана и стэк был отчищен
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. #5
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от kushichka Посмотреть сообщение
    а если записать
    PHP код:
    const  example
    то эту переменную можно изменить, и в следующий раз она примет последнее значение?
    Ошибка должна быть..

  6. #6
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Это как минимум должно быть знакомо из школьного курса физики/математики.
    Цитата Сообщение от kushichka Посмотреть сообщение
    а если записать
    PHP код:
    const  example
    то эту переменную можно изменить, и в следующий раз она примет последнее значение?
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  7. #7
    Аватар для kushichka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.04.2014
    Сообщений
    75
    Репутация:
    6 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Не знаешь о том, что такое константы что ли? Константе задаётся значение только при объявлении и больше его никак изменить нельзя. Это "static" делает локальную переменную, по сути, глобальной и такая переменная сохраняет значение даже после того, как функция, в которой была объявлена такая переменная, была обработана и стэк был отчищен
    Я знаю что такое константы, просто пытаюсь уловить разницу с static.

  8. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от kushichka Посмотреть сообщение
    Я знаю что такое константы, просто пытаюсь уловить разницу с static.
    static делает переменную "видимой" только в том блоке кода/скрипте, где она была объявлена. То есть:
    • Если объявить такую переменную в инклюде, указав тег static, данную переменную можно будет использовать только внутри инклюда и если в моде, сразу после подключения инклюда, объявить переменную с таким же именем, компилятор не скажет, что имя уже зарезервировано.
    • Если же объявить такую переменную внутри функции - она станет чем-то вроде глобальной переменной (не будет отчищается вместе со стеком после окончания обработки кода функции), при этом поле видимости её останется исключительно внутри функции

    Как-то так
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #9
    Аватар для kushichka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.04.2014
    Сообщений
    75
    Репутация:
    6 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    static делает переменную "видимой" только в том блоке кода/скрипте, где она была объявлена. То есть:
    • Если объявить такую переменную в инклюде, указав тег static, данную переменную можно будет использовать только внутри инклюда и если в моде, сразу после подключения инклюда, объявить переменную с таким же именем, компилятор не скажет, что имя уже зарезервировано.
    • Если же объявить такую переменную внутри функции - она станет чем-то вроде глобальной переменной (не будет отчищается вместе со стеком после окончания обработки кода функции), при этом поле видимости её останется исключительно внутри функции

    Как-то так
    Так если static всегда находится в памяти, то почему вариант с использованием static const во всех форматах считается более оптимизированным? Или это делается только ради удобства подсчета длины стринга и никак не влияет на оптимизацию?

  10. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от kushichka Посмотреть сообщение
    Так если static всегда находится в памяти, то почему вариант с использованием static const во всех форматах считается более оптимизированным? Или это делается только ради удобства подсчета длины стринга и никак не влияет на оптимизацию?
    Чпок и http://pro-pawn.ru/showthread.php?12257]тыщ по ссылке

    А static тут нужна для того, чтоб массив можно было создать прямо внутри функции, при этом он имел свойства глобального массива, а не выносить создание такого массива вне функции (представь, что для того, чтоб отредактировать текст сообщения, тебе сначала надо изменить текст в массиве, который находится в начале мода, а потом найти все места, где используется этот массив и уже потом только править их)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •