В таком варианте вадаёт:
Class1
$obj2 -> printHello(); :
Public
Protected
Private
end;
Public
Если закомментировать:
echo $obj -> protected;
echo $obj -> private;
вадаёт:
Class1
$obj2 -> printHello(); :
Public
Protected
Private
end;
Public
Class2
$obj2 -> printHello(); :
Public
Protected2
Private*
$obj2 -> printHello2(); :
Public
Protected2
Public
Может кто подскажет почему:
в первом результате у меня не перехватывает ошибку?
Во втором наследник выдаёт private*, получается, что модификатор private не работает?
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
ЯРус пишет:
в первом результате у меня не перехватывает ошибку?
что то я не заметил где вы бросаете исключение!?
protected не может быть виден вне класса, только в родителе и наследнике.
private виден только в контексте класса родителя.
ЯРус
Отправлено: 06 Марта, 2012 - 20:18:03
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2012
Помог: 0 раз(а)
Bio man пишет:
что то я не заметил где вы бросаете исключение!?
разве не является фатальной ошибкой:
echo $obj -> protected;
echo $obj -> private1; ?
Цитата:
Если закомментировать:
echo $obj -> protected;
echo $obj -> private;
комментирую ошибку.
По поводу Private* ничего не понял. Он должен давать доступ только в родительском классе, а я вызываю через унаследованный.
OrmaJever
Отправлено: 06 Марта, 2012 - 20:44:54
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
ЯРус, вы не правельно поняли суть исключений. Они не перехватывают ошибки, а ловят брошеные исключения.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Okula
Отправлено: 06 Марта, 2012 - 22:09:20
Участник
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
Для того чтоб сработало исключение его нужно "выбросить". Делается это с помощью оператора throw
caballero
Отправлено: 06 Марта, 2012 - 22:33:18
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
разве не является фатальной ошибкой:
PHP не выбрасывает исключения. Тем более их не выбрасывает компилятор и runtime среда .
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2012
Помог: 0 раз(а)
caballero пишет:
с чего бы ей не иметь доступ к private полю своего класса?
Я же к полю обращаюсь через объект MyClass2(), а он в свою очередь наследник!
Цитата:
Модификатор private позволяет обращаться к свойствам и методам только внутри текущего класса.
Модификатор protected позволяет обращаться к свойствам и методам только текущего класса и класса, который наследует свойства и методы текущего класса.
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2012
Помог: 0 раз(а)
caballero пишет:
не обращаешся ты ни к какому полю
функция обращается
А по-русски?
Или тут все навороченные и кроме как давать недоответы не могут?
Bio man
Отправлено: 07 Марта, 2012 - 16:00:23
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
ЯРус. смотри. у тебя 2 класса, 1 родитель, другой наследник. в родителе есть метод printHello() а в наследнике нету. и вы обращаетесь к методу родительского класса, потому что метод не перегружен в наследнике.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.