Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: visibility в классах
 
 автор: 1999   (23.04.2007 в 16:51)   письмо автору
 
 

есть основной класс системы с именем cms, в нем есть переменные типа private:

<?php
class cms
{
  private 
$settings = array();
}
...


в модуль основной класс передается по ссылке, но когда я пытаюсь в нем брать значение переменной $this->cms->settings, то выскакивает это:
Fatal error: Cannot access private property cms::$settings

но почему так? я же передаю цмску в модуль по ссылке и переменные основного класса (цмс) должны быть видны... или нет? и как сделать их видными, не ставя settings в состояние public

   
 
 автор: bronenos   (23.04.2007 в 17:31)   письмо автору
 
   для: 1999   (23.04.2007 в 16:51)
 

выставить public религия не позволяет?
зачем оно такое вам

   
 
 автор: 1999   (23.04.2007 в 17:35)   письмо автору
 
   для: bronenos   (23.04.2007 в 17:31)
 

потому что я не хочу чтобы параметры системы были public-типа

   
 
 автор: Andre   (23.04.2007 в 17:51)   письмо автору
 
   для: 1999   (23.04.2007 в 17:35)
 

Обращаться к элементам класса указанным образом ($this->cms->settings) внутри класса недопустимао. Правильно : $this->settings;. Советую почитать информацию об использовании возможностей ООП в php.

   
 
 автор: 1999   (23.04.2007 в 18:06)   письмо автору
 
   для: Andre   (23.04.2007 в 17:51)
 

кхм... вы вобще читали мой первый пост?
есть класс cms
есть класс news

в news класс cms передается по ссылке (ну это так к слову...)

   
 
 автор: Trianon   (23.04.2007 в 17:43)   письмо автору
 
   для: 1999   (23.04.2007 в 16:51)
 

Трогать поле settings может лишь метод этого класса. А уВас его пытается трогать внешняя функция.
Создавайте методы, которые позволяли бы рабоать с приватными полями.

   
 
 автор: bronenos   (23.04.2007 в 17:50)   письмо автору
 
   для: Trianon   (23.04.2007 в 17:43)
 

либо
<?php
function setting ($name=false)
{
  return (!
$name)
    ? 
$this->settings
    
: (in_array($name$this->settings))
      ? 
$this->settings[$name] : false;
}


$settings $cls->setting();
$name $cls->setting ('name');
?>

   
 
 автор: 1999   (23.04.2007 в 18:07)   письмо автору
 
   для: Trianon   (23.04.2007 в 17:43)
 

а есть ли смысл создавать такие методы? все равно же их надо будет делать public-типа... может проще сразу сделать поле settings таким? (public)

   
 
 автор: Trianon   (23.04.2007 в 18:18)   письмо автору
 
   для: 1999   (23.04.2007 в 18:07)
 

Впечатление такое, что Вы мешаете в один винегрет две разные концепции защиты: защиту доступа к членам класса элементами ООП-кода, и защиту доступа к сайту его посетителями.
Это две совершенно непересекающиеся плоскости.
Если Вы не хотите пользоваться ООП-средствами (или только ООП-защитой) - не пользуйтесь. Никто ведь не настаивает. Безопасность сайта всяко определяться будет не этим.

   
 
 автор: Valick   (23.04.2007 в 21:11)   письмо автору
 
   для: 1999   (23.04.2007 в 18:07)
 

а есть ли смысл создавать такие методы?
А какой литературой по ООП вы пользуетесь?

"Если вы не имеете достаточного опыта в ООП, то для вас может остаться неясным предназначение частных элементов. Частные элементы позволяют инкапсулировать данные внутри обьекта. Они остаются скрытыми и недоступными для внешнего кода и способствуют свободному сцеплению. Если код вне структуры данных не имеет возможности осуществить доступ к данным непосредственно, он не может реализовать скрытую зависимость.
Конечно, большая часть частных свойств по-прежнему представляет ирформацию, которая будет разделена с кодом, находящимся вне объекта. Решение заключается в наличии пары общедоступных методов (конструкторов), предназначенных для передачи и установки. Обычно этот конструктор также принимает первоначальные значения для свойств. Это позволяет осуществлять взаимодействие с элементами через узкий, хорошо определённый интерфейс..."
____
Леон Аткинсон Зеев Сураски "РНР5"

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования