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.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Доступ к свойствам
ssfn
Отправлено: 30 Сентября, 2013 - 16:41:14
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Объясните, пожалуйста,почему не работает этот код?
PHP:
скопировать код в буфер обмена
  1. class A{
  2.         function __construct(){
  3.                 $x = new B;
  4.         }
  5. }
  6. class B{
  7.         public $t;
  8.         function __construct(){
  9.                 $this->t = 'QweR';
  10.         }
  11. }
  12. $o = new A;
  13. echo $x->t;
 
 Top
imya
Отправлено: 30 Сентября, 2013 - 16:50:05
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




А где объявление $x ?


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
caballero
Отправлено: 30 Сентября, 2013 - 16:50:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




потому что обращаешся к несушществующей переменной


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
ssfn
Отправлено: 30 Сентября, 2013 - 17:08:24
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




imya пишет:
А где объявление $x ?

В смысле?..
Ну,на сколько я понимаю,это примерно так:
Класс А, при создании экземпляра, автоматически создает объект,экземпляр B.
А в B,при создании экземпляра,автоматически добавляется свойство $t.Потом из кода я хочу получить к нему доступ...
Вообщем..создал объект,который,при создании,запустил конструктор,который создал другой объект,экземпляр другого класса,в котором свой конструктор задал значение свойства..
Или я не так понимаю?
PHP:
скопировать код в буфер обмена
  1. class A{
  2.         function __construct(){
  3.                 $x = new B;
  4.         }
  5. }
  6. class B{
  7.         public $t;
  8.         function __construct(){
  9.                 $this->t = 'QweR';
  10.         }
  11. }
  12. $o = new A;
  13. echo $x->t;

А объявить,это как...так,в смысле?
PHP:
скопировать код в буфер обмена
  1. class A{
  2.         public $x;
  3.         function __construct(){
  4.                 $x = new B;
  5.         }
  6. }
  7. class B{
  8.         public $t;
  9.         function __construct(){
  10.                 $this->t = 'QweR';
  11.         }
  12. }
  13. $o = new A;
  14. echo $x->t;

Но это не работает..
(Добавление)
caballero пишет:
потому что обращаешся к несушществующей переменной

Почему к несуществующей?
$t же должна была получить значение при создании объекта.
Да и $x вроде должен был быть создан..

(Отредактировано автором: 30 Сентября, 2013 - 17:12:38)

 
 Top
caballero
Отправлено: 30 Сентября, 2013 - 17:14:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Да и $x вроде должен был быть создан..

так он внутри класса создан


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
ssfn
Отправлено: 30 Сентября, 2013 - 17:17:15
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




caballero пишет:
Цитата:
Да и $x вроде должен был быть создан..

так он внутри класса создан

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

(Отредактировано автором: 30 Сентября, 2013 - 17:20:02)

 
 Top
caballero
Отправлено: 30 Сентября, 2013 - 17:19:10
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Да,но насколько я понимаю,объект,он и есть объект...

Это ПЕРЕМЕННАЯ. И ее область видимости не зависит от того объект там или что то еще.

ООП тут вообше ни при чем.

(Отредактировано автором: 30 Сентября, 2013 - 17:19:42)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
ssfn
Отправлено: 30 Сентября, 2013 - 17:22:10
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




caballero пишет:
Цитата:
Да,но насколько я понимаю,объект,он и есть объект...

Это ПЕРЕМЕННАЯ. И ее область видимости не зависит от того объект там или что то еще.

ООП тут вообше ни при чем.

Исправь,пожалуйста,тогда этот кусок.
Ну,что бы на примере было видно..
PHP:
скопировать код в буфер обмена
  1. class A{
  2.         function __construct(){
  3.                 $x = new B;
  4.         }
  5. }
  6. class B{
  7.         public $t;
  8.         function __construct(){
  9.                 $this->t = 'QweR';
  10.         }
  11. }
  12. $o = new A;
  13. echo $x->t;

Да,кстати,так тоже пробовал.
Раз это ПЕРЕМЕННАЯ..
PHP:
скопировать код в буфер обмена
  1. class A{
  2.         function __construct(){
  3.                 return $x = new B;
  4.         }
  5. }
  6. class B{
  7.         public $t;
  8.         function __construct(){
  9.                 $this->t = 'QweR';
  10.         }
  11. }
  12. $o = new A;
  13. echo $x->t;

(Отредактировано автором: 30 Сентября, 2013 - 17:25:14)

 
 Top
Мелкий Супермодератор
Отправлено: 30 Сентября, 2013 - 17:31:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




ssfn пишет:
Почему к несуществующей?
$t же должна была получить значение при создании объекта.

$t - существует в $o, а не в $x.

ssfn пишет:
Да и $x вроде должен был быть создан..

Он был создан. В конструкторе класса A. При окончании обработки конструктора, переменная была уничтожена. Т.к. потеряна область видимости.


-----
PostgreSQL DBA
 
 Top
ssfn
Отправлено: 30 Сентября, 2013 - 17:49:05
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Мелкий пишет:

$t - существует в $o, а не в $x.

Он был создан. В конструкторе класса A. При окончании обработки конструктора, переменная была уничтожена. Т.к. потеряна область видимости.


Как же тогда получить к ней доступ?
Пробывал вариации из этого:
PHP:
скопировать код в буфер обмена
  1. class A{
  2.         public $x;
  3.         public $t;
  4.         function __construct(){
  5.                 $x = new B;
  6.         }
  7. }
  8. class B{
  9.         public $t;
  10.         public $x;
  11.         function __construct(){
  12.                 $this->t = 'QweR';
  13.         }
  14. }
  15. $o = new A;
  16. echo $o->t;
  17. echo $x->t;

(Добавление)
ssfn пишет:
Мелкий пишет:

$t - существует в $o, а не в $x.

Он был создан. В конструкторе класса A. При окончании обработки конструктора, переменная была уничтожена. Т.к. потеряна область видимости.


Как же тогда получить к ней доступ?
Пробывал вариации из этого:
PHP:
скопировать код в буфер обмена
  1. class A{
  2.         public $x;
  3.         public $t;
  4.         function __construct(){
  5.                 $x = new B;
  6.         }
  7. }
  8. class B{
  9.         public $t;
  10.         public $x;
  11.         function __construct(){
  12.                 $this->t = 'QweR';
  13.         }
  14. }
  15. $o = new A;
  16. echo $o->t;
  17. echo $x->t;

Хотя бред,конечно...она же должна быть видна,раз объект создан
 
 Top
esterio
Отправлено: 30 Сентября, 2013 - 18:00:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Еще раз - почему она должна быть глобальной, если вы обьявляете ее локальной(касательно переменной $x)
PHP:
скопировать код в буфер обмена
  1. class A
  2. {
  3.         public $x;
  4.        
  5.         public function __construct(){
  6.                 $this->x = new B;
  7.         }
  8. }
  9. class B
  10. {
  11.         public $t;
  12.         function __construct()
  13.         {
  14.                 $this->t = 'QweR';
  15.         }
  16. }
  17.  
  18. $o = new A;
  19. echo $o->x->t;


UPD. опечатка. поправил. копипаста епт

(Отредактировано автором: 30 Сентября, 2013 - 20:30:34)

 
 Top
Medallion
Отправлено: 30 Сентября, 2013 - 18:02:12
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012  
Откуда: Херсон, Украина


Помог: 7 раз(а)




Объект нужно засунуть в свойство класса A, и будет все работать.
Смотри реализацию.
PHP:
скопировать код в буфер обмена
  1.  
  2. class A{
  3.     public $x;
  4.         function __construct(){
  5.                 $this->x = new B;
  6.         }
  7. }
  8. class B{
  9.         public $t;
  10.         function __construct(){
  11.                 $this->t = 'QweR';
  12.         }
  13. }
  14. $o = new A;
  15. echo $o->x->t;
  16.  

(Добавление)
esterio

Поспешил Закатив глазки
esterio пишет:
$o = new A;
echo $a->x->t;

Откуда переменная $a
 
 Top
ssfn
Отправлено: 30 Сентября, 2013 - 18:11:37
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Medallion пишет:
Объект нужно засунуть в свойство класса A, и будет все работать.
Смотри реализацию.
PHP:
скопировать код в буфер обмена
  1.  
  2. class A{
  3.     public $x;
  4.         function __construct(){
  5.                 $this->x = new B;
  6.         }
  7. }
  8. class B{
  9.         public $t;
  10.         function __construct(){
  11.                 $this->t = 'QweR';
  12.         }
  13. }
  14. $o = new A;
  15. echo $o->x->t;
  16.  

(Добавление)
esterio

Поспешил Закатив глазки
esterio пишет:
$o = new A;
echo $a->x->t;

Откуда переменная $a


Теперь понял)
Спасибо огромное!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB