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

Форум PHP

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

 

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

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

тема: Доступ из дочерноего класса
 
 автор: vorobey   (25.10.2011 в 20:19)   письмо автору
 
 

Вечерок добрый!

class main{
}

class name1 extends main{
 function word($flag1){
 $this->flag1 = $flag1;
 }
}

class name2 extends main{
   function word($flag2){
   $this->flag2 = $flag2;
   }
}



Нужно получить доступ в классе name2 доступ к переменной $this->flag1 как это сделать?

зы Ой блин не туда написал!!! Перенесите пожалуста в PHP!

  Ответить  
 
 автор: sl1p   (25.10.2011 в 23:11)   письмо автору
 
   для: vorobey   (25.10.2011 в 20:19)
 

вы бред какойто написали) получить можно только так:



class name2 extends main{
   function word($flag2){
   $this->flag2 = $flag2;
   $n1 = new name1();
   $n1->word();
   var_dump($n1->flag1);
   }


вы не правильно используете ооп.

  Ответить  
 
 автор: vorobey   (25.10.2011 в 23:19)   письмо автору
 
   для: sl1p   (25.10.2011 в 23:11)
 

Не бред). Я наверно не доходчиво выразился.

  Ответить  
 
 автор: cheops   (26.10.2011 в 11:42)   письмо автору
 
   для: vorobey   (25.10.2011 в 20:19)
 

>Нужно получить доступ в классе name2 доступ к переменной $this->flag1 как это сделать?
Не очень понятно ситуация, вы где-то в другом месте устанавливаете значение $this->flag1? Если да, то где и как? Дело в том, что $this - это текущий объект, если вы хотите обратиться к переменной другого объекта, вместо $this следует использовать имя этого другого объекта.

  Ответить  
 
 автор: vorobey   (26.10.2011 в 17:59)   письмо автору
 
   для: cheops   (26.10.2011 в 11:42)
 

В классе name1 используется flag1 (вкл выкл сессии),
Мне понадобилось использовать этот фла и в классе name2 и чтобы не лезть в код
вывода данных я хочу получить к переменной flag1 доступ в классе name2.

проблема в принципе ерундовая - можно в "рукопашную" его прописать, но мне интересно - как по правильному это сделать.

Выше мне предложили вариант , он работает ,но надо кучу параметров передовать Это не очень удобно делать из за одной переменной.

  Ответить  
 
 автор: cheops   (27.10.2011 в 17:23)   письмо автору
 
   для: vorobey   (26.10.2011 в 17:59)
 

А что эти классы делают? Они у вас вроде не статические, но такое ощущение, что из любого объекта производятся какие-то глобальные изменения? Это так?

  Ответить  
 
 автор: vorobey   (27.10.2011 в 21:52)   письмо автору
 
   для: cheops   (27.10.2011 в 17:23)
 

Нет никаких глобальных изменений не делается.

Вот суть .
Есть главный класс в котором есть методы проверок текста и т.п.
проверка
- сессия (вкл/выкл)
- пусто/ не пусто
- длинна (мало/много) символов
- наличие в базе имени итп
- проверка для мыла
- проверка для имени
и еще несколько функций...
Каждый метод дает ответ массив( ошибка, значение, сообщение)
т.е. нужно при каждой оплошности выдавать предупреждение (если пусто, то ответ "пусто") и дальше по аналогии.

Но не всем нужны эти методы и я использовал небольшие дочерние классы
Например для мыла
проверка
- пустоту, длинны(мин/ макс)
- валидность имаил
и при каждом не правильном или правильном вводе данных создается сессия для этого поля
что бы не терялось значение (ушел со страницы на другую ...)
На всякий случай я сделал в главном классе отключение всех сессий.
Но теперь мне понадобилось сделать отключение только для пароля (понятно почему).
Такой вид в обработчике

// Pass
    $Name = new checkContent($link, $conf_lang); // на пустоту, длинну
    $pass1 = $Name->checkWord($POST['password1'], 'reg', 'pass1', $confWord['pass_start'], $confWord['pass_end'], false);
    $pass2 = $Name->checkWord($POST['password2'], 'reg', 'pass2', $confWord['pass_start'], $confWord['pass_end'], false);

А такой перед выводом в шаблон html

$SesOnOff = new checkSessionOnOff($link, $lang);
$pass_1 = $SesOnOff->checkWord($pass1[1], $_SESSION['reg']['pass1'], false);

Оба класса являются дочерними одного класса с набором методов.
вот моя задача писать в обработчике FLASE и чтоб не лезть в checkSessionOnOff();
Ибо можно запутаться со временем.
А checkSessionOnOff нужен для того когда сессии созданы и в этот момент я их отключаю
они-же никуда не деваются(не удаляю) и продолжают гадить... вот этот простой переключатель и дает на выходе то от куда надо брать данные .

  Ответить  
 
 автор: cheops   (28.10.2011 в 10:41)   письмо автору
 
   для: vorobey   (27.10.2011 в 21:52)
 

1. Т.е. речь идет о классе, содержащем набор вспомогательных методов? Т.е. объект ему вроде как и не нужен, так как внутри его нет данных, которые нужно хранить? Лучше такие классы объявлять статическими и обращаться к их методам не через ->, а через ::
2. Если вам нужен метод одного класса в другом, и оба класса унаследованы от одного базового класса, нужно перемещать метод в базовый класс.

  Ответить  
 
 автор: vorobey   (28.10.2011 в 13:01)   письмо автору
 
   для: cheops   (28.10.2011 в 10:41)
 

Да все правильно.
Попробую через ::

Метод мне не нужен, мне нужна переменная , ненужного метода )

  Ответить  
 
 автор: cheops   (28.10.2011 в 13:33)   письмо автору
 
   для: vorobey   (28.10.2011 в 13:01)
 

Сделайте статическую переменную на уровне базового класса и пусть переменная ненужного метода меняет её, тогда она будет доступна и параллельной наследной ветке.

  Ответить  
Rambler's Top100
вверх

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