powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php) Как константе присвоить значение переменной или функции
24 сообщений из 24, страница 1 из 1
(php) Как константе присвоить значение переменной или функции
    #38492862
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как константе присвоить значение переменной или функции:
Код: php
1.
2.
3.
if(!class_exists(semt)) { abstract class semt {
    const prt = функция или переменная
}}


?
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38492901
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02,

Почитай здесь для чего вообще нужны константы и какие они могут принимать значения.
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38492981
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через рефлекшн разве что
http://www.php.net/manual/en/book.reflection.php
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38493173
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПочитай здесь для чего вообще нужны константы и какие они могут принимать значения.
Принимать могут любые скалярные значение. И изменять своё значение в процессе выполнения программы не могут.
Но из этого не следует, что то значение, которым они должны быть проинициализированы, не может вычисляться в момент объявления оной константы. Этот запрет не является следствием или требованием существа константы.
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38493194
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowчерез рефлекшн разве что
http://www.php.net/manual/en/book.reflection.php Ниасилил. Пример бы не помешал.

Объявляю вспомогательную функцию sfnc, которая возвращает значение целевой переменной или целевой функции, и далее выполняю:

Код: php
1.
2.
3.
if(!class_exists(semt)) { abstract class semt {
    const prt = ReflectionFunction::invoke(sfnc);
}}


Так ?
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38493248
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо из этого не следует, что то значение, которым они должны быть проинициализированы, не может вычисляться в момент объявления оной констант
https://wiki.php.net/rfc/const_scalar_exprs
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38493282
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow , покажите пример присваивания константе класса значения некоторой переменной или функции.
Возможно, с использованием Reflection-классов.
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38496804
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так никто и не подскажет...
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38497064
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$const_value = func();
eval "abstract class semt { const prt = $const_value;}"
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38500802
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow$const_value = func();
eval "abstract class semt { const prt = $const_value;}"
Неа. Хитрить не нужно.
В данном примере в момент интерпретации класса константе присваивается константное значение.
А необходимо, чтобы значение вычислялось и присваивалось константе в момент интерпретации.
И без всяких eval'ов. Объявлять классы через eval - это некошерно.
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38502217
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02Объявлять классы через eval - это некошерно.
а менять константы, кошерно ?
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38502240
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02Как константе присвоить значение переменной или функции:
Код: php
1.
2.
3.
if(!class_exists(semt)) { abstract class semt {
    const prt = функция или переменная
}}


?

Итак, надеюсь понимаете почему константа? потому что её нельзя менять.
Другое дело, что Вы можете присвоить ей любое скалярное значение (но только один раз, второе присвоение ошибки не выдаст, но и результат изменён не будет).

Для этого можно использовать конструкцию define($name, $value).
Ну например вот так можно делать:
Код: php
1.
2.
3.
$test = 'ttt';
define(TT, $test);
echo TT;



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

P.S. Странно, что этого ещё никто не написал :)
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38502280
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой )) Кажется я не по теме немного ответил :) Тут речь идёт об константах класса.

Сейчас экспериментирую. Помню что-то подобное видел.
Я так понимаю принципиальности в том, что бы это была константа нету? Главное ведь - это защитить переменную от записи (то есть сделать её read-only)?
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38502304
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, самый простой способ - это объявить переменную как private и переопределить метод __get:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class A{
  private $b;
  function __get($property){
    if($property==="b") return $this->$property;
    user_error("Invalid property: " . __CLASS__ . "->$property");
  }
  function __construct(){
    $this->b = 'hello';
  }
}

$o = new A;
echo $o->b;
echo $o->k;



и всё, проблема решена, наш объект обладает read-only атрибутом b.
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38502593
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора менять константы, кошерно ?
Именно поэтому пример ScareCrow и не подходит. Константу менять нельзя и не нужно.
Нужно в момент объявления класса присвоить константе значение, вычисляемое в момент интерпретации объявления класса. Ведь вычислять значение константа не запрещает ? Или вычислять тоже нельзя ?

авторНу вот, самый простой способ - это объявить переменную как private и переопределить метод __get:
Нет, должна быть именно константа:
Код: php
1.
2.
3.
if(!class_exists(semt)) { abstract class semt {
    const prt = ШИРМА;
}}


ШИРМА - это чёрный ящик. Т.е. некоторое выражение на языке php, которое возвращает значение, зависящее от значения пременной $p.

Т.е. нужно сделать так:
Код: php
1.
const prt = $p;


или так:
Код: php
1.
const prt = func($p);


Но сделать это в такой форме, чтобы интерпретатор php эту конструкцию проглотил и не подавился.
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38502598
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвычисляемое в момент интерпретации объявления класса
в compile time на текуший момент вычислять ничего нельзя. точка. в 5.6 можно будет вычислять скаляры.
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38502610
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02,

совсем не понял что надо :)

Опишите не попытку решения задачи, а саму задачу, пожалуйста. Для чего Вам надо то, что Вы стараетесь сделать?

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

Правильно я понял? или что-то иное требуется?
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38506350
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПо Вашим словам, могу предположить, что Вы хотите спрятать функцию за константой (ну то есть, обращаясь к константе, программист получает не её статическое значение, а то, что вернёт некая функция)?Я ведь уже несколько раз описал задачу:
Нужно в момент объявления класса присвоить константе класса значение, которое должно быть вычислено в момент компиляции объявления класса . Далее уже, при выполнении php-кода я использую значение этой константы (ИмяКласса::ИмяКонстанты) и никогда более не меняю . Т.е. при объявлении класса в значение константы класса должно вычисляться. И должно вычисляться только при объявлении класса.

Т.е. нужно сделать так:
Код: php
1.
2.
3.
4.
5.
if(!class_exists(semt)) { abstract class semt {
    ...
    const prt = $p;
    ...
}}



или так:
Код: php
1.
2.
3.
4.
5.
if(!class_exists(semt)) { abstract class semt {
    ...
    const prt = func($p);
    ...
}}


Но сделать это в такой форме, чтобы интерпретатор php эту конструкцию проглотил и не подавился.

----------------------------------------------------------------------------
Похоже, дело обстоит так, как сказал ScareCrow :
авторв compile time на текущий момент вычислять ничего нельзя. точка. в 5.6 можно будет вычислять скаляры.
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38506396
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо сделать это в такой форме, чтобы интерпретатор php эту конструкцию проглотил и не подавился.
eval
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38506546
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02,

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

eval вам не подходит (ну, я тоже не поклонник, однако это всё же вариант решения)... read-only переменная не подходит... поясните пожалуйста, какую же задачу Вы решаете?
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38514975
Сергей Арбузов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02 Т.е. при объявлении класса в значение константы класса должно вычисляться. И должно вычисляться только при объявлении класса.


Извините, но это не константа.
Это переменная которая зависит в общем случае от времени объявления класса.
Использовать константу, это как "мышки, а вы станьте птичками"
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38515235
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арбузов,

Вот, наконец-то здравомыслящий человек появился. На хера топикстартеру была нужна именно константа остается загадкой... Видимо, архитектура требует, че уж поделать
...
Рейтинг: 0 / 0
(php) Как константе присвоить значение переменной или функции
    #38515406
Сергей Арбузов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikkiMouse,
не ну можно перед описанием класса сделать функцию которая вычисляет значение, потом запихивает это значение в глобальную константу через define, а внутри класса присвоить константе класса значение глобальной константы....
.... о крокодильчики полетели.....

но зачем это делать?!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
(php) Как константе присвоить значение переменной или функции
    #39030968
Гость2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрбузовMikkiMouse,
запихивает это значение в глобальную константу через define, а внутри класса присвоить константе класса значение глобальной константы....


Отличное решение, спасибо.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php) Как константе присвоить значение переменной или функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]