Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Защищённые елементы в классах


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

Автор: skalex 5.5.2005, 08:04
Ну начнем с того, что эти вещи появляются только в 5-ой версии PHP. В низших версиях все члены класса являются открытыми, что не очень хорошо с точки зрения ООП. Обычно к переменным класса доступ извне закрывают (private) и все манипуляции с ними производят с помощью методов этого класса.

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

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

Автор: skalex 5.5.2005, 08:20
Ну так и к исходникам компилируемой программы кто то может получить доступ ... smile

Автор: IZ@TOP 5.5.2005, 09:28
В общем это философия такая smile

Автор: AntonioBanderaz 5.5.2005, 15:17
Private я знаю зачем, а вот
Код

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


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

Автор: IZ@TOP 5.5.2005, 16:34
Цитата(AntonioBanderaz @ 5.5.2005, 16:17)
protected function getName() {
////
}

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

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

protected вроде как ограничивает (отрубает) возможность вызова из вне, т.е. работать с протектедом могут только базовый класс и дочерные объекты...
http://ru2.php.net/manual/ru/language.oop5.visibility.php

Автор: Joes 5.5.2005, 17:55
Дескрипторы Private, Public и Protected

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

* Public (открытый): Метод/переменная доступны из любого места в коде.
* Private (закрытый): Закрытые методы или переменные доступны только внутри класса.
* Protected (защищённый): Защищённые методы или переменные доступны только внутри класса, где они были объявлены и из его производных классов.

Автор: AntonioBanderaz 6.5.2005, 06:46
А почему тогда выполняется такой код?

Код

<?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.... Мож глюк? Или я что не так накодил...

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

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

Код

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

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

Автор: AntonioBanderaz 8.5.2005, 01:17
А всё, я допёр, всем спасибо!!!!

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

по-моему это в основном будет использоваться в модулях и встроенных классах

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

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

ну да. не спорю

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

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

ппкс ибо имею опыт. В основном для защиты от перекрытия объявленных переменных. Хотя есть ISO конечно, но всегда может случиться shit smile

Автор: AntonioBanderaz 9.5.2005, 13:54
Но ведь без них можно и обойтись?

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)