php constant expression contains invalid operations
PHP Error : Fatal error: Constant expression contains invalid operations
I am getting an error:
Fatal error: Constant expression contains invalid operations in config.php on line 214
Whether I did any mistakes in quotes? Or somewhere else?
My search for the error message only showed a different source cause (a dynamic default value in a function definition).
From the official Php documentation :
Like any other PHP static variable, static properties may only be initialized using a literal or constant before PHP 5.6; expressions are not allowed. In PHP 5.6 and later, the same rules apply as const expressions: some limited expressions are possible, provided they can be evaluated at compile time.
This is because all static declarations are resolved in compile-time, when the content of other variables is not known (see this other page of official doc).
Raja this is because a static variable contains a constant value in it. But in your case:
$appdata[‘id’] is dynamic that can change its value during the execution. That’s why the error is showing.
Unless you mess with reflection, the only way I can think of to have a static private/protected class property with a dynamically generated value is to calculate it outside the class:
In your precise use case, however, it’s possible that there’s simply no good reason for the property to be static. In that case, it’s as straightforward as using the constructor:
I had this error and my fix was to not declare a date within a class property array
Ошибка PHP: Неустранимая ошибка: выражение константы содержит недопустимые операции
Я получаю сообщение об ошибке:
Неустранимая ошибка: выражение константы содержит недопустимые операции в config.php в строке 214
Были ли ошибки в кавычках? Или где-то еще?
Мой поиск сообщения об ошибке показал только другую причину источника (динамическое значение по умолчанию в определении функции).
ОТВЕТЫ
Ответ 1
Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы перед PHP 5.6; выражения не допускаются. В PHP 5.6 и более поздних версиях те же правила применяются как выражения const: возможны некоторые ограниченные выражения, если они могут быть оценены во время компиляции.
Это связано с тем, что статические объявления разрешаются во время компиляции, когда содержимое других переменных не известно (см. этот другой страница официального документа).
Ответ 2
Raja это потому, что статическая переменная содержит в себе постоянное значение. Но в вашем случае:
$appdata [‘id’] является динамическим, который может изменять его значение во время выполнения. Вот почему отображается ошибка.
Ответ 3
У меня была эта ошибка, и мое исправление заключалось в том, чтобы не объявлять дату в массиве свойств класса
Ответ 4
В вашем конкретном случае использования, однако, возможно, что просто нет веской причины для того, чтобы свойство было статичным. В этом случае это так же просто, как использование конструктора:
Почему один и тот же PHP код вызывает синтаксическую ошибку?
Пишу вот такой кусочек кода:
Он работает, и выводит рандомные имена файлов.
Оформляю его же в виде класса:
Почему так? Как исправить?
С помощью var можно инициализировать только константные значения.
Так здесь инициализируется константа.
Выражение одно и то же.
Нет, значение будет разное в зависимости от рандома
Но оно же вычисляется до того, как будет инициализирована константа. Вычисляется выражение, и полученным значением инициализируется константа. В чем проблема?
Проблема в том, что его нельзя просто взять и вычислить, для этого нужно запускать код. Для этого есть конструкторы.
Как же его можно вычислить, если результат функции неизвестен на этапе компиляции?
С каких пор PHP стал компилируемым языком?
Наличие интерпретатора не означает отсутствие этапа компиляции.
Негоже быть таким безграмотным.
Вот это дельное замечание.
Конструктор бы трогать не хотелось.
Может быть, можно вычислить значение до определения класса и воспользоваться им в инициализации переменной? Что-то не получается у меня это сделать.
только хз работает или нет
Чем товй код отличается от моего?
У вас минимум 4 синтаксические ошибки. Как и у ТС.
не очень понятно чего он хочет в итоге добиться.
не многим, там тоже не правильно. Но примерно должно быть так,наверное.
Для начала http://php.net/manual/en/language.oop5.properties.php Там написано чем и почему нельзя инициализировать свойства класса. Да и про синтаксис почитать будет не лишним.
Без конструктора можно, но тогда будет совсем непонятно нафига тут класс. Например:
Или можно побороть первобытный страх перед конструкторами и написать так:
С каких пор PHP стал компилируемым языком?
Боюсь ошибиться, но вроде бы с 4 версии, когда появился Zend Engine.
Я похож на твою маму, которая бегает тебе готовить чай когда ты противным голоском этого требуешь? Ты явно меня с кем-то перепутал.
нет, благо моя мама не такая бесполезная как ты. =)
Комменты не читал но сразу скажу. Нельзя выполнять любые операции помимо присваивания вне конструктора или методов.
Я бесполезный потому что не метнулся выполнять твои хотелки или я бесполезный потому что ты глупый и пишешь невалидный код на языке, которого не знаешь?
Просто вынеси из своего выражения rand(0,3) во внешнюю констану (хоть через тот же define
ну так написал бы валидный код, на своем уровне чем сраться как сам и написал с таким «глупым школьником».
То есть мой ответ выше был тебе.
Правильный ответ дан в первом же посте, что ты собрался писать и зачем?
Хотела и написала, так же как и ты по неведомой причине решил оскорбить меня.
Может быть причина в том, что это не он, а она? Ну хочется ей быть полезной, да не умеет она, что поделаешь.
Так здесь инициализируется константа.
Это тоже не сработает. Если выносить во внешнюю константу, то всё выражение array(‘caveman.gdf’, ‘automatic.gdf’, ‘bubblebath.gdf’, ‘crass.gdf’)[rand(0,3)])
Конструктор бы трогать не хотелось.
Дельный совет уже дали. Выносить все это во внешние константы – бред какой-то. Делай все внутри конструктора, да и если ты захочешь использовать этот список шрифтов в другом месте или изменить – один фиг будешь доставать его из внешних конфиг приложения. Так что забей.
PHP Parse error: syntax error, unexpected ‘(‘ in sample_02.php on line 5
А почему это говно выплюнуло такую неочевидную ошибку? Выплюнуло бы что-то вроде: «non-static data member initializers isn’t available».
Надо же, чтобы они генерировались для каждого инстанса класса!
Нет, я вижу где конфигурируемый список и думаю, что как и для любого конфигуриремого списка ему место в конфиге приложения. Но я не байтодрочер, и понимаю, что здесь тег ООП и это PHP, а не С. И поэтому, думаю что даже мерзкие конфиги, а-ля
Потому что автор интерпретатора хотя бы знает английский, в отличие от дурака из России, который не способен ни в пых, ни в английский. English motherfucker! Do you speak it?
Потому что так универсальнее. Еще какие-то кучи типов ошибок придумывать, тьфу.
Ты поехавший. У тебя СПГС. Был вопрос конкретный. Без всяких потребнойстей к какой-либо архитектуре. Предложенное тобою решение генерировало бы случайный элемент из списка для каждого инстанса класса, в то время как исходя из исходного описания, этот случайный элемент списка должен быть одним для всех инстансов.
Если ты не понимаешь отличия переменной от константы, то мне страшно представить какой из тебя ахритектор.
Потому что у него версия php ниже седьмой. В седьмой все нормально описывается
Да, лан, даже perl иногда получше сообщает, где косяк:
А в остальном согласен.
для каждого инстанса класса
Если ты не понимаешь отличия переменной от константы, то мне страшно представить какой из тебя ахритектор.
О каких «каждых инстансах» ты говоришь? Если для тебя не очевидно, что для конфигурации приложения потребуется один единственный инстанс, то мне страшно представить какой из тебя программист.
А устанавливать константу RAND(0,3) только ради того, чтобы получить псевдорендомное значение из массива – это просто верх мысли, ага.
Ты какой-то агрессивный и унылый. Это всё из-за PHP, наверное. Программирование должно доставлять радость и лулзы.
Тебя когда спрашивают как инициализировать переменную, ты начинаешь рассказывать о масштабируемости и хай-лоаде? Ты здоров? Ты читать умеешь? В оп-посте где-то был вопрос о том, что это конфиг? Илио том, как ему хранить конфиг? Там вообще про конфиг и архитектурные решения какие-либо вопросы задавались?
Ваш helloworld.lang плохо поддается поддержке, надо срочно все переписать на %LanguageName% на основе %FrameworkName% с применением %TechnologyName%
В оп-посте где-то был вопрос о том, что это конфиг?
$fontFile = ‘fonts/’.array(‘caveman.gdf’, ‘automatic.gdf’, ‘bubblebath.gdf’, ‘crass.gdf’)[rand(0,3)];
Т.е. ты считаешь, что (независимо от «задумки» разраба) в будущем конфигурировать этот список не понадобится? Ок.
Свойство, как объект
получаем Fatal error: Constant expression contains invalid operations
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Ссылка на объект как свойство класса
Добрый вечер. Есть 2 класса: сотрудники и компании. Если использовать БД то вопрос бы решался.
Объект как свойство или как оно делается
Схема примерно такова class Upper < >class Lower
У вас в кучу все, конструктор класса без класса, публичные переменные выдаваемые за класс, и попытка обратится к текстовой переменной как к объекту. Что вы хотите получить на выходе?
там нет пояснения на пост 1
Jodah, мне через конструктор тогда его объявить объектом, чтобы при отправке в вид ВЕЗДЕ не дописывать (object)?
Добавлено через 1 минуту
Решение
Добавлено через 10 минут
Вы кстати насчет this не правы, видимо в одном только php и пишите. При использовании ООП это не рекомендуется- вы либо используете процедурный подход и ООП не трогаете,либо клепаете класс :
По вашему варианту так работает:
Как то странно получается, вы не знаете что такое self, но уже решаете кто прав, а кто нет.
Модификатор static напрямую связан с классом, если поле статично, значит оно принадлежит классу, если метод статичный, аналогично — он принадлежит классу.
Предположим, существует статический метод increment() в классе Counter, задачей которого является инкрементирование счётчика count. Для вызова данного метода можно использовать обращение вида Counter->increment(). Нет необходимости создавать экземпляр класса Counter для доступа к статическому полю или методу.
Это фундаментальное отличие между статическими и НЕ статическими объектами (членами класса).
А теперь по поводу this.
Так вот. this в ЭКЗЕМПЛЯРЕ указывает НА ЭТОТ САМЫЙ экземпляр (к примеру в конструкторе класса). Это указатель-ссылка на текущий объект— «ПРИМЕНЯТЬ ЗДЕСЬ».
PHP Error : Fatal error: Constant expression contains invalid operations
Posted by: admin February 12, 2018 Leave a comment
I am getting an error:
Fatal error: Constant expression contains invalid operations in
config.php on line 214
Whether I did any mistakes in quotes? Or somewhere else?
My search for the error message only showed a different source cause (a dynamic default value in a function definition).
Like any other PHP static variable, static properties may only be initialized using a literal or constant before PHP 5.6; expressions are not allowed. In PHP 5.6 and later, the same rules apply as const expressions: some limited expressions are possible, provided they can be evaluated at compile time.
This is because static declarations are resolved in compile-time, when the content of other variables is not know (see this other page of official doc).
I had this error and my fix was to not declare a date within a class property array
Raja this is because a static variable contains a constant value in it. But in your case:
$appdata[вЂid’] is dynamic that can change its value during the execution. That’s why the error is showing.
Unless you mess with reflection, the only way I can think of to have a static private/protected class property with a dynamically generated value is to calculate it outside the class:
In your precise use case, however, it’s possible that there’s simply no good reason for the property to be static. In that case, it’s as straightforward as using the constructor:
Related Posts
CMS advice – PHP
Q(Question): Apologies for x-posting but seemed no obvious single forum for my query. I am new to content management systems and am considering using a cms to implement a content-based web site with a.
Sending mail with php – PHP
Q(Question): php mail… I did this ages before but I’m having problems with it.