![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Enjoy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 4.2.2006 Репутация: нет Всего: нет |
Здравствуйте!
Я занимался программированием в Object Pascal и C++, и не давно стал изучать PHP. Мне нужно создать иерархическую структуру классов - один класс вложен в другой, и т.д. Я сделал так, как я делал это всегда раньше, но в PHP это не работает!
Может быть PHP его не видит? Что я могу сделать? Да, и для чего в PHP применяется такая форма записи переменной: "var $variable"? Это означает, что изменения передаваемой в функцию переменной затронут и переданную переменную? Заранее благодарен. |
|||
|
||||
| Rock |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 264 Регистрация: 13.1.2005 Где: Краснодар Репутация: 0 Всего: 1 |
По всей видимости Вы используете PHP5.
var - это пережиток от PHP4 и более ранних версий, в PHP5 он сохранен для совместимости, эквивалентен public В PHP при объявлении свойств можно присваивать им только постоянные значения, константы. Передавать же результаты какой-либо операции, или же переменную - нельзя. Вы можете сделать так:
|
|||
|
||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
смешались в кучу: кони, люди... в РНР4 все поля объекта имели одинаковую область видимости(public) и задавались так: "var $amount". в РНР5 появились области видимости и поля объекта стали задаваться так: "public $name" или "private $surname". А вариант с "var" перекочевал из объектной модели 4 версии для обеспечения обратной совместимости(так же как и возможность объявления конструктора в виде функции с именем класса, хотя уже появилась магическая функция __contrsuct) как именно не работает? ругается или ты не можешь за пределами класса получить значение этого поля(область видимости private - на всякий случай обращаю внимание)? быть может, инициализировать поля при объявлении можно только константными значениями, а обращение к конструктору, как-никак, это вызов функции. Не встречал я в С++ такого:
Если причина в невозможности инициализировать поля функциями, то запизни эту инициализацию в конструктор(так сразу "по-правильному" и надо было сделать - для того конструкторы и существуют). И заведи себе какой-нить мануал + учебник. Лучший мануал - php.net Если не дружишь с английским, то есть русское зеркало, только оно медленнее отзывается на обновление "старшего брата" - php.ru |
||||
|
|||||
| Enjoy |
|
||||||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 4.2.2006 Репутация: нет Всего: нет |
смешались в кучу: кони, люди... в РНР4 все поля объекта имели одинаковую область видимости(public) и задавались так: "var $amount". в РНР5 появились области видимости и поля объекта стали задаваться так: "public $name" или "private $surname". А вариант с "var" перекочевал из объектной модели 4 версии для обеспечения обратной совместимости(так же как и возможность объявления конструктора в виде функции с именем класса, хотя уже появилась магическая функция __contrsuct) как именно не работает? ругается или ты не можешь за пределами класса получить значение этого поля(область видимости private - на всякий случай обращаю внимание)? быть может, инициализировать поля при объявлении можно только константными значениями, а обращение к конструктору, как-никак, это вызов функции. Не встречал я в С++ такого:
Если причина в невозможности инициализировать поля функциями, то запизни эту инициализацию в конструктор(так сразу "по-правильному" и надо было сделать - для того конструкторы и существуют). И заведи себе какой-нить мануал + учебник. Лучший мануал - php.net Если не дружишь с английским, то есть русское зеркало, только оно медленнее отзывается на обновление "старшего брата" - php.ru Спасибо за ответ, я имел ввиду вот это:
Если я делаю так:
то меня матерят так: Fatal error: Cannot access empty property in ... on line 11 Если так:
то меня матерят вот так: Parse error: parse error, unexpected T_NEW in ... on line 51 Help please. Добавлено через 2 минуты и 37 секунд
Похоже заработало, спасибо! |
||||||||||||||||
|
|||||||||||||||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
естественно. т.к. в твоем коде свойство объявляется позже конструктора, то в конструкторе об этом поле ничего ещё неизвестно. интепретатору не лениво сразу же при попытке доступа создать такое поле, но такое не делается, т.к. ты просто мог очепятаться при наборе названия поля. оттого - ошибка. потому надо сначала объявлять поле, а потом уже получать доступ к нему. как и указал уже Rock, просто я посчитал необходимым ещё и пояснить: что и зачем. примечание: инициализировать при помощи null, в приниципе, не обязательно. хотя может сильно выручить при необходимости отделения неинициализированных полей от инициализированных. И ещё: необязательно в ответе цитировать пост полностью. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |