Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Не работает условный оператор в объявлении полей класса PHP 5.4
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
Добрый день, данная проблема возникла не у меня, а у моего друга, поэтому все детали данного магического поведения мне не ясны(в том числе и логи) А суть вот в чем: при объявлении поля класса и задания значения через условный оператор, фреймворк YII на php 5.4 выдает ошибку примерного вида unexpected '?'. на php 5.5 такой проблемы не наблюдается. В чем же корень данной проблемы?
(Добавление)
upd. Кажется уже нашел в документации: "Переменные, которые являются членами класса, называются "свойства". Также их называют, используя другие термины, такие как "атрибуты" или "поля", но в рамках этой документации, мы будем называть их свойствами. Они определяются с помощью ключевых слов public, protected, или private, следуя правилам правильного описания переменных. Это описание может содержать инициализацию, но инициализация должна применяться для константных значений - то есть, переменные должны быть вычислены во время компиляции и не должны зависеть от информации программы во время выполнения для их вычисления."
Теперь такой вопрос: почему в 5.5 все работает?)
Мелкий
Отправлено: 29 Февраля, 2016 - 13:24:00
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Уверены, что 5.5, а не 5.6?
Некоторые типы вычислений разрешили в 5.6
Цитата:
melkij@melkij:~$ php-5.4.45 -f phptest.php
PHP Parse error: syntax error, unexpected '?', expecting ',' or ';' in /home/melkij/phptest.php on line 4
Parse error: syntax error, unexpected '?', expecting ',' or ';' in /home/melkij/phptest.php on line 4
melkij@melkij:~$ php-5.5.32 -f phptest.php
PHP Parse error: syntax error, unexpected '?', expecting ',' or ';' in /home/melkij/phptest.php on line 4
Parse error: syntax error, unexpected '?', expecting ',' or ';' in /home/melkij/phptest.php on line 4
melkij@melkij:~$ php-5.6.18 -f phptest.php
melkij@melkij:~$ cat phptest.php
<?php
class A
{
public $var1 = FOO ? '1' : '2';
}
----- PostgreSQL DBA
TuX560
Отправлено: 29 Февраля, 2016 - 13:43:43
Гость
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
Мелкий пишет:
Уверены, что 5.5, а не 5.6?
Некоторые типы вычислений разрешили в 5.6
Что удалось выпытать из друга) Решить ему решили путем инициализации в конструкторе, для него работает и ладно, а самому интересно стало. В текущей его версии php(пока не известна) даже при полном выводе debug - никаких ошибок/предупреждений не выдает, и работает вариант с инициализацией с использованием условного оператора.
PS: Вы кажется не объявили константу FOO
К сожалению у самого под руками только 5.6 поэтому сам протестить не могу.
upd. проверил у себя на 5.6 - тоже не работает Теперь еще большая загадка, почему у него получается использовать данный синтаксис. возможно причина в xampp под windows? Сам тестил под федорой (Добавление)
Новые забавные факты: пример тот что выше у него тоже не работает, а вот содержимое файла assets\AppAsset.php успешно отрабатывает. PHP 5.6.8
? CONST - зарезервированное слово. На него парсер и обижается. Потому у себя и вписал какую-нибудь другую константу.
Прошу прощения, Вы правы, вместо CONST тоже использовалось другое имя, но проблема была в синтаксисе допущенная по невнимательности.
Тогда вопрос: можно так писать если в требованиях указать php 5.6 или все-таки это говнокод?
DelphinPRO
Отправлено: 29 Февраля, 2016 - 16:07:16
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
TuX560 пишет:
Тогда вопрос: можно так писать если в требованиях указать php 5.6 или все-таки это говнокод?
Конечно говнокодъ.
Для инициализации объекта существует специальный метод-конструктор __construct()
Чем он вам не понравился?
----- Чем больше узнаю, тем больше я не знаю.
TuX560
Отправлено: 01 Марта, 2016 - 08:17:14
Гость
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
DelphinPRO пишет:
Для инициализации объекта существует специальный метод-конструктор __construct()
Чем он вам не понравился?
Так и посоветовал, а что если класс статический и доступ к полю есть только через геттер?(вопрос чисто абстрактный)
LIME
Отправлено: 01 Марта, 2016 - 08:28:02
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
TuX560 пишет:
а что если класс статический
значит он не нужен
распространенная ошибка новичков в ООП клепать "статические" классы
TuX560 пишет:
доступ к полю есть только через геттер
сие невозможно
либо всё статика либо используются акцессоры
невозможно сделать закрытое свойство в статическом классе так как для закрытого свойства нужен инстанс
короче что надо сделать? подозреваю что ничего и вопрос чисто по теории
тогда совет просто начать писать и набить шишки
TuX560
Отправлено: 01 Марта, 2016 - 10:36:42
Гость
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
LIME пишет:
TuX560 пишет:
а что если класс статический
значит он не нужен
распространенная ошибка новичков в ООП клепать "статические" классы
Согласен в большинстве случаев статические классы не нужны(есть опыт c++/c#) Вопрос был чисто теоритический.
LIME пишет:
TuX560 пишет:
доступ к полю есть только через геттер
сие невозможно
либо всё статика либо используются акцессоры
невозможно сделать закрытое свойство в статическом классе так как для закрытого свойства нужен инстанс
Об этом не подумал.
LIME пишет:
короче что надо сделать? подозреваю что ничего и вопрос чисто по теории
тогда совет просто начать писать и набить шишки
Абсолютно верно, мне пока в голову такое писать не приходило, а друг столкнулся с подобной ситуацией, захотелось разобраться.
Спасибо за ответы
LIME
Отправлено: 01 Марта, 2016 - 10:41:33
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
TuX560 пишет:
а друг столкнулся с подобной ситуацией
скорее всего дело именно в отвлеченности от проблемы
наверное ты чтото себе сам придумал
сам создал проблему и сам ее решаешь
условия в голове
такое бывает часто когда решаешь сугубо умозрительные задачи...тоесть думаешь что прочитал и понял и только на практике понимаешь что неправильно понял теорию
хотя видимо это ты уже понял
TuX560 пишет:
Спасибо за ответы
заходи не бойся
думающему человеку всегда приятно ответить
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.