PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: Доступ к свойствам
Поиск в теме | Версия для печати
ssfn
Отправлено: 30 Сентября, 2013 - 16:41:14
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
Объясните, пожалуйста,почему не работает этот код?
PHP:
скопировать код в буфер обмена
class A{
function __construct( ) {
$x = new B;
}
}
class B{
public $t ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $x -> t ;
ssfn
Отправлено: 30 Сентября, 2013 - 17:08:24
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
imya пишет: А где объявление $x ?
В смысле?..
Ну,на сколько я понимаю,это примерно так:
Класс А, при создании экземпляра, автоматически создает объект,экземпляр B.
А в B,при создании экземпляра,автоматически добавляется свойство $t.Потом из кода я хочу получить к нему доступ...
Вообщем..создал объект,который,при создании,запустил конструктор,который создал другой объект,экземпляр другого класса,в котором свой конструктор задал значение свойства..
Или я не так понимаю?
PHP:
скопировать код в буфер обмена
class A{
function __construct( ) {
$x = new B;
}
}
class B{
public $t ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $x -> t ;
А объявить,это как...так,в смысле?
PHP:
скопировать код в буфер обмена
class A{
public $x ;
function __construct( ) {
$x = new B;
}
}
class B{
public $t ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $x -> t ;
Но это не работает..
(Добавление)
caballero пишет: потому что обращаешся к несушществующей переменной
Почему к несуществующей?
$t же должна была получить значение при создании объекта.
Да и $x вроде должен был быть создан..(Отредактировано автором: 30 Сентября, 2013 - 17:12:38)
caballero
Отправлено: 30 Сентября, 2013 - 17:14:15
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011
Откуда: Харьков
Помог: 126 раз(а)
Цитата: Да и $x вроде должен был быть создан..
так он внутри класса создан
ssfn
Отправлено: 30 Сентября, 2013 - 17:17:15
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
caballero пишет: Цитата: Да и $x вроде должен был быть создан..
так он внутри класса создан
Да,но насколько я понимаю,объект,он и есть объект...
Ну,можешь поподробнее объяснить?
Просто в ООП только недавно стал вникать...
На самом деле есть уже большой код,и между классами объекты передаются таким образом...а тут вдруг из кода не получилось
(Отредактировано автором: 30 Сентября, 2013 - 17:20:02)
caballero
Отправлено: 30 Сентября, 2013 - 17:19:10
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011
Откуда: Харьков
Помог: 126 раз(а)
Цитата: Да,но насколько я понимаю,объект,он и есть объект...
Это ПЕРЕМЕННАЯ. И ее область видимости не зависит от того объект там или что то еще.
ООП тут вообше ни при чем.
(Отредактировано автором: 30 Сентября, 2013 - 17:19:42)
ssfn
Отправлено: 30 Сентября, 2013 - 17:22:10
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
caballero пишет: Цитата: Да,но насколько я понимаю,объект,он и есть объект...
Это ПЕРЕМЕННАЯ. И ее область видимости не зависит от того объект там или что то еще.
ООП тут вообше ни при чем.
Исправь,пожалуйста,тогда этот кусок.
Ну,что бы на примере было видно..
PHP:
скопировать код в буфер обмена
class A{
function __construct( ) {
$x = new B;
}
}
class B{
public $t ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $x -> t ;
Да,кстати,так тоже пробовал.
Раз это ПЕРЕМЕННАЯ..
PHP:
скопировать код в буфер обмена
class A{
function __construct( ) {
return $x = new B;
}
}
class B{
public $t ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $x -> t ;
(Отредактировано автором: 30 Сентября, 2013 - 17:25:14)
Мелкий
Отправлено: 30 Сентября, 2013 - 17:31:43
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
ssfn пишет: Почему к несуществующей?
$t же должна была получить значение при создании объекта.
$t - существует в $o, а не в $x.
ssfn пишет: Да и $x вроде должен был быть создан..
Он был создан. В конструкторе класса A. При окончании обработки конструктора, переменная была уничтожена. Т.к. потеряна область видимости.
ssfn
Отправлено: 30 Сентября, 2013 - 17:49:05
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
Мелкий пишет:
$t - существует в $o, а не в $x.
Он был создан. В конструкторе класса A. При окончании обработки конструктора, переменная была уничтожена. Т.к. потеряна область видимости.
Как же тогда получить к ней доступ?
Пробывал вариации из этого:
PHP:
скопировать код в буфер обмена
class A{
public $x ;
public $t ;
function __construct( ) {
$x = new B;
}
}
class B{
public $t ;
public $x ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $o -> t ;
echo $x -> t ;
(Добавление)
ssfn пишет: Мелкий пишет:
$t - существует в $o, а не в $x.
Он был создан. В конструкторе класса A. При окончании обработки конструктора, переменная была уничтожена. Т.к. потеряна область видимости.
Как же тогда получить к ней доступ?
Пробывал вариации из этого:
PHP:
скопировать код в буфер обмена
class A{
public $x ;
public $t ;
function __construct( ) {
$x = new B;
}
}
class B{
public $t ;
public $x ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $o -> t ;
echo $x -> t ;
Хотя бред,конечно...она же должна быть видна,раз объект создан
esterio
Отправлено: 30 Сентября, 2013 - 18:00:23
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012
Откуда: Украина, Львов
Помог: 127 раз(а)
Еще раз - почему она должна быть глобальной, если вы обьявляете ее локальной(касательно переменной
$x )
PHP:
скопировать код в буфер обмена
class A
{
public $x ;
public function __construct( ) {
$this -> x = new B;
}
}
class B
{
public $t ;
function __construct( )
{
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $o -> x -> t ;
UPD. опечатка. поправил. копипаста епт(Отредактировано автором: 30 Сентября, 2013 - 20:30:34)
Medallion
Отправлено: 30 Сентября, 2013 - 18:02:12
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012
Откуда: Херсон, Украина
Помог: 7 раз(а)
Объект нужно засунуть в свойство класса A, и будет все работать.
Смотри реализацию.
PHP:
скопировать код в буфер обмена
class A{
public $x ;
function __construct( ) {
$this -> x = new B;
}
}
class B{
public $t ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $o -> x -> t ;
(Добавление)
esterio
Поспешил
esterio пишет: $o = new A;
echo $a->x->t;
Откуда переменная $a
ssfn
Отправлено: 30 Сентября, 2013 - 18:11:37
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
Medallion пишет: Объект нужно засунуть в свойство класса A, и будет все работать.
Смотри реализацию.
PHP:
скопировать код в буфер обмена
class A{
public $x ;
function __construct( ) {
$this -> x = new B;
}
}
class B{
public $t ;
function __construct( ) {
$this -> t = 'QweR' ;
}
}
$o = new A;
echo $o -> x -> t ;
(Добавление)
esterio
Поспешил
esterio пишет: $o = new A;
echo $a->x->t;
Откуда переменная $a
Теперь понял)
Спасибо огромное!
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB