Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Защищённые елементы в классах, Что это??? 
:(
    Опции темы
AntonioBanderaz
Дата 5.5.2005, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Чем отличаються защищенные и не защищённые элементы класса, и как это может быть полезно на практике?
А то я что-то не дорубаю.... Спа. smile


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
skalex
Дата 5.5.2005, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: нет
Всего: 23



Ну начнем с того, что эти вещи появляются только в 5-ой версии PHP. В низших версиях все члены класса являются открытыми, что не очень хорошо с точки зрения ООП. Обычно к переменным класса доступ извне закрывают (private) и все манипуляции с ними производят с помощью методов этого класса.
PM   Вверх
IZ@TOP
Дата 5.5.2005, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Цитата(Mace @ 5.5.2005, 09:04)
Обычно к переменным класса доступ извне закрывают (private) и все манипуляции с ними производят с помощью методов этого класса.

А мне вот когда 5 РНР вышел стало даже как то смешно - ну сделал я метод/свойство класса приватным, а то-то взял и код изменил и получил доступ... это же не компиленная программа а сценарий для исполнения в текстовом файле smile Если конечно не юзать Zend Encoder и Turk MMCache smile


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
skalex
Дата 5.5.2005, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: нет
Всего: 23



Ну так и к исходникам компилируемой программы кто то может получить доступ ... smile
PM   Вверх
IZ@TOP
Дата 5.5.2005, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



В общем это философия такая smile


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
AntonioBanderaz
Дата 5.5.2005, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Private я знаю зачем, а вот
Код

class HZ {
protected function getName() {
 ////
}
}


Что этот protected даёт?


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
IZ@TOP
Дата 5.5.2005, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Цитата(AntonioBanderaz @ 5.5.2005, 16:17)
protected function getName() {
////
}

Вроде ошибаюсь... но кажется что защищает от переназначения...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Mal Hack
Дата 5.5.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



IZ@TOP
Цитата(IZ @ 5.5.2005, 17:34)
Вроде ошибаюсь... но кажется что защищает от переназначения...

protected вроде как ограничивает (отрубает) возможность вызова из вне, т.е. работать с протектедом могут только базовый класс и дочерные объекты...
http://ru2.php.net/manual/ru/language.oop5.visibility.php
PM ICQ   Вверх
Joes
Дата 5.5.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 15.11.2004

Репутация: нет
Всего: 7



Дескрипторы Private, Public и Protected

В PHP4 все методы и переменные внутри объекта были доступны извне, другими словами все методы и переменные всегда были открытыми. В PHP5 вводится три дескриптора для осуществления контроля над доступом к переменным и методам: Public, Protected и Private.

* Public (открытый): Метод/переменная доступны из любого места в коде.
* Private (закрытый): Закрытые методы или переменные доступны только внутри класса.
* Protected (защищённый): Защищённые методы или переменные доступны только внутри класса, где они были объявлены и из его производных классов.
PM MAIL   Вверх
AntonioBanderaz
Дата 6.5.2005, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



А почему тогда выполняется такой код?

Код

<?php
class Name {
public $Name;

public function __construct($name) {
          $this->Name = $name;
}
protected function getName() {
           return ($this->Name);
}
}



$w1 = new Name('Antonio Banderaz','0');
echo $w1->getName();



и даже так

Код

<?php
class Name {
public $Name;

public function __construct($name) {
          $this->Name = $name;
}
protected function getName() {
           return ($this->Name);
}
}

class newName extends Name {
public function getName() {
            return (parent::getName());
}
}

$w1 = new Name('Antonio Banderaz');
$w2 = new newName('Antonio Banderaz');
echo $w2->getName();
echo $w1->getName();


ну и где доступ только из внутренних функций? У меня вывел в обоих случаях Antonio Banderaz.... Мож глюк? Или я что не так накодил...


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
oxygen
Дата 8.5.2005, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.5.2005
Где: Москва, СВАО

Репутация: нет
Всего: 3



ну так все правильно
$w1 и $w2 являются объектами классов Name и NewName соответственно. Взаимодействие происходит внутри класса.

Вот такой вызов по идее не должен работать

Код

class Name {
  function protected getName($var) {
     print $var;
  }
}

$var = Name::getName("Hello world");

PM MAIL WWW ICQ   Вверх
AntonioBanderaz
Дата 8.5.2005, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



А всё, я допёр, всем спасибо!!!!


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Irokez
Дата 8.5.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 4
Всего: 53



Цитата(IZ @ 5.5.2005, 08:07)
А мне вот когда 5 РНР вышел стало даже как то смешно - ну сделал я метод/свойство класса приватным, а то-то взял и код изменил и получил доступ... это же не компиленная программа а сценарий для исполнения в текстовом файле smile Если конечно не юзать Zend Encoder и Turk MMCache smile

по-моему это в основном будет использоваться в модулях и встроенных классах
PM   Вверх
IZ@TOP
Дата 8.5.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Irokez, но если исходники не скомпилины любой кто их использует может получить доступ к коду и изменить его. Я ведь прав? В любом случае это относится к коммерческим продуктам.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Irokez
Дата 8.5.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 4
Всего: 53



Цитата(IZ @ 8.5.2005, 13:40)
Irokez, но если исходники не скомпилины любой кто их использует может получить доступ к коду и изменить его. Я ведь прав?

ну да. не спорю
PM   Вверх
Illuminaty
Дата 8.5.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 1
Всего: 56



Защищенные элементы классов скорее всего полезны при работе в группе, когда разные программисты пишут различные участки кода, модули. Чтобы не нарушалась целостность данных и код был более удобным для использования.
ИМХО
PM MAIL ICQ   Вверх
oxygen
Дата 8.5.2005, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.5.2005
Где: Москва, СВАО

Репутация: нет
Всего: 3



Цитата(Illuminaty @ 8.5.2005, 18:36)
Защищенные элементы классов скорее всего полезны при работе в группе, когда разные программисты пишут различные участки кода, модули. Чтобы не нарушалась целостность данных и код был более удобным для использования.
ИМХО

ппкс ибо имею опыт. В основном для защиты от перекрытия объявленных переменных. Хотя есть ISO конечно, но всегда может случиться shit smile
PM MAIL WWW ICQ   Вверх
AntonioBanderaz
Дата 9.5.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Но ведь без них можно и обойтись?


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Illuminaty
Дата 9.5.2005, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 1
Всего: 56



Цитата(AntonioBanderaz @ 9.5.2005, 13:54)
Но ведь без них можно и обойтись?

Смотря над каким проектом работаешь.
Если проект небольшой и ты делаешь его один, то можно про них забыть, иначе см. предыдущий пост
Если хочешь держать свой проект под контролем, попробуй их использовать smile

Это сообщение отредактировал(а) Illuminaty - 9.5.2005, 14:19
PM MAIL ICQ   Вверх
AntonioBanderaz
Дата 10.5.2005, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Для себя...хм... Вот вроде въехал в них, привыкаю.... Я раньше вообще классы не пользовал, тоже не понимал зачем они нуны, зато теперь почти любой проект без них не делаю... Всем пасиб, буду привыкать, заоодно пойму для чего они на практике полезны...


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.