На ум приходит создать родительский класс статичным, а доступ к его свойствам осуществлять через self:: Но у меня загвоздка в том, что если так сделать надо много где менять $this на self. Чесслово - очень много где

Можно ли это като обойдти?
Спустя 8 минут, 9 секунд (15.12.2011 - 20:41) bodja написал(а):
А зачем?
Если не секрет.
Если не секрет.
Спустя 6 минут, 58 секунд (15.12.2011 - 20:48) Winston написал(а):
Цитата (ruzab @ 15.12.2011 - 19:33) |
Но у меня загвоздка в том, что если так сделать надо много где менять $this на self. Чесслово - очень много где |
По моему если класс наследуется, и в нем идет вызов какого-то свойства или еще чего, не определенного в нем, то тогда он ищет это свойство в родительском классе.
Цитата (ruzab @ 15.12.2011 - 19:33) |
На ум приходит создать родительский класс статичным, а доступ к его свойствам осуществлять через self:: |
Почитай про parent
Спустя 6 минут, 56 секунд (15.12.2011 - 20:55) ruzab написал(а):
Не секрет.
Не знаю, правда, получится-ли у меня всё это понятно объяснить. Но попробую...
У меня собственно есть класс назовем его "первый". Он наследуется от родительского класса в котором кое-что инициализируется и куда еще кое-что заносится в процессе работы скрипта (причем кое-что из всего этого имеет модификаторы protected). Php cкрипты находятся внутри методов этого "первого" класса.
Но в ходе работы мне необходимо подключить из "первого" другой класс - в котором такая-же ситуация - скрипты находятся внутри методов класса.
Так вот, мне необходимо, чтобы и этот второй класс из своих методов имел доступ к тем значениям, которые уже определены в родительском классе в процессе работы программы, причем поскольку некоторые данные protected надо этот второй класс унаследовать от родителя.
Т.е. если я тупо сделаю наследование, то экземпляр родителя будет создан заново и я потеряю всю информацию, которая в процессе работы программы в него заносилась...
Не знаю, понятно-ли получилось?

Не знаю, правда, получится-ли у меня всё это понятно объяснить. Но попробую...
У меня собственно есть класс назовем его "первый". Он наследуется от родительского класса в котором кое-что инициализируется и куда еще кое-что заносится в процессе работы скрипта (причем кое-что из всего этого имеет модификаторы protected). Php cкрипты находятся внутри методов этого "первого" класса.
Но в ходе работы мне необходимо подключить из "первого" другой класс - в котором такая-же ситуация - скрипты находятся внутри методов класса.
Так вот, мне необходимо, чтобы и этот второй класс из своих методов имел доступ к тем значениям, которые уже определены в родительском классе в процессе работы программы, причем поскольку некоторые данные protected надо этот второй класс унаследовать от родителя.
Т.е. если я тупо сделаю наследование, то экземпляр родителя будет создан заново и я потеряю всю информацию, которая в процессе работы программы в него заносилась...
Не знаю, понятно-ли получилось?

Спустя 1 час, 16 минут, 33 секунды (15.12.2011 - 22:11) bodja написал(а):
А.. ясно,
если уже клас определен,еще проще,передавайте указатель на него куда хотите,
хотите в родительский или еще куда нибудь. Ну и пользуйтесь ним.
если уже клас определен,еще проще,передавайте указатель на него куда хотите,
хотите в родительский или еще куда нибудь. Ну и пользуйтесь ним.
Спустя 1 час, 37 минут, 53 секунды (15.12.2011 - 23:49) Guest написал(а):
Не моглибы вы поподробнее объяснить... Что вы имеете в виду и как это применить

Спустя 2 минуты, 49 секунд (15.12.2011 - 23:52) ruzab написал(а):
Последнее сообщение было моё

Спустя 2 часа, 55 минут (16.12.2011 - 02:47) caballero написал(а):
Цитата |
как можно сделать наследование от одного класса нескольких, но так, чтобы у родительского класса не создавался экземпляр заново. |
Никакого экземпляра родительского не создается в принципе. Создается один екземпояр класса наследника.
Цитата |
Php cкрипты находятся внутри методов этого "первого" класса. |
А на каком языке сами классы написаны и каким образом внутри методов находятся PHP скрипты?
Цитата |
причем поскольку некоторые данные protected надо этот второй класс унаследовать от родителя. |
А каким образом причиной наследования являются данные protected (шо сие такое кстати)
Цитата |
Не знаю, понятно-ли получилось? |
Пока понятно что к вам в колхоз наконец привезли компьютер (Я ЛЮБЛЮ СЕБЯ!). Когда подоишь коров - почитай про ООП - рекомендую книгу Котерова например.
! |
Семён |
Спустя 7 часов, 19 минут, 16 секунд (16.12.2011 - 10:06) ruzab написал(а):
Цитата (caballero @ 15.12.2011 - 23:47) | ||
Пока понятно что к вам в колхоз наконец привезли компьютер (Я ЛЮБЛЮ СЕБЯ!). Когда подоишь коров - почитай про ООП - рекомендую книгу Котерова например. |
Сам почитай. если у вас в колхозе так общаются, то не надо свое быдлянство выносить сюда на форум.
Спустя 1 час, 9 минут, 34 секунды (16.12.2011 - 11:16) m4a1fox написал(а):
ruzab
ИМХО конечно, но просмотрите например книжку Мэтта Зандстры - там про шаблоны говорится. Может она вам чем нибудь поможет.
ИМХО конечно, но просмотрите например книжку Мэтта Зандстры - там про шаблоны говорится. Может она вам чем нибудь поможет.
Спустя 1 час, 50 минут, 5 секунд (16.12.2011 - 13:06) caballero написал(а):
Цитата |
ИМХО конечно, но просмотрите например книжку Мэтта Зандстры - там про шаблоны говорится. Может она вам чем нибудь поможет. |
Какой там Зандстра? Тут не в програмировании проблема. Человек не может для живых людей связать несколько слов чтобы его могли понять чего он хочет а пытается программировать для тупой железяки.
Спустя 8 минут, 33 секунды (16.12.2011 - 13:15) m4a1fox написал(а):
caballero
Цитата |
Какой там Зандстра? Тут не в програмировании проблема. Человек не может для живых людей связать несколько слов чтобы его могли понять чего он хочет а пытается программировать для тупой железяки. |
А! Это уже другое! Практиковать надо! Как я понял суть в том, что наследование имеет один маленький недостаток. А именно, нельзя сделать так class Three extends two, one

что в итоге получается, нельзя в class three унаследовать метода как из class two так и из class one одновременно!
Спустя 2 минуты, 36 секунд (16.12.2011 - 13:17) Winston написал(а):
Цитата (m4a1fox @ 16.12.2011 - 12:15) |
А именно, нельзя сделать так class Three extends two, one |
Да, множественного наследования в PHP нету. Но если сделать цепочку наследования one -> two -> three. То из класса 3 можно обращаться к членам из второго и первого класса...
Спустя 1 минута, 29 секунд (16.12.2011 - 13:19) SlavaFr написал(а):
Цитата (caballero @ 16.12.2011 - 10:06) |
Человек не может для живых людей связать несколько слов чтобы его могли понять |
Если не понятно, то можно переспросить или проигнорировать тему.
Хамство вызывает в 95% процентах агресивную реакцию и приводит к отдалению от темы.
@caballero чего Вы хотели добится вашим хамским высказыванием?
Спустя 7 минут, 10 секунд (16.12.2011 - 13:26) bodja написал(а):
Ну чего сцепились?
Сделать можно ,если я правильно понял ТС.
Нужно получить доступ к методам из другого обьекта к уже созданому обьекту.
Правильно?
Сделать можно ,если я правильно понял ТС.
Нужно получить доступ к методам из другого обьекта к уже созданому обьекту.
Правильно?
Спустя 2 минуты, 33 секунды (16.12.2011 - 13:28) m4a1fox написал(а):
Winston
Цитата |
Но если сделать цепочку наследования one -> two -> three |
Я поэтому про шаблоны и говорил. Копозиция, делегирование и т.д. слабо еще разбираюсь в этом...
Спустя 17 секунд (16.12.2011 - 13:29) caballero написал(а):
Цитата |
А! Это уже другое! Практиковать надо! Как я понял суть в том, что наследование имеет один маленький недостаток. А именно, нельзя сделать так class Three extends two, one что в итоге получается, нельзя в class three унаследовать метода как из class two так и из class one одновременно! |
В последнем PHP добавили treat для компенсации отсутствия множественного наследования.
Цитата |
Если не понятно, то можно переспросить или проигнорировать тему. |
Переспрашивали - получили такой же поток сознания.
Цитата |
Хамство вызывает в 95% процентах агресивную реакцию и приводит к отдалению от темы. |
К теме даже не приближались изза отсутствия понимания в чем о она заключается.
Цитата |
@caballero чего Вы хотели добится вашим хамским высказыванием? |
Чтобы ты взял карандаш бумагу нарисовал примеры в кубиках или как там, взял технический словарь, учебник по PHP с терминами и сформулировал вопрос так чтобы люди которые готовы тебе бесплатно ответить не тратили время и не ломали себе мозги чего ж он сердешный хочет то.
Спустя 1 минута, 14 секунд (16.12.2011 - 13:30) caballero написал(а):
Цитата |
Я поэтому про шаблоны и говорил. Копозиция, делегирование и т.д. слабо еще разбираюсь в этом... |
Напрасно говорил - это просто наследование не более того. Просто кроме дочернего класса есть еще и внучатый.
Спустя 2 минуты, 54 секунды (16.12.2011 - 13:33) m4a1fox написал(а):
caballero
UML мать его!
Чтобы ты взял карандаш бумагу нарисовал примеры в кубиках или как там
UML мать его!
Цитата |
Напрасно говорил - это просто наследование не более того |
Ну тогда я в книжку полез!
Спустя 43 секунды (16.12.2011 - 13:33) ruzab написал(а):
Цитата (bodja @ 16.12.2011 - 10:26) |
Нужно получить доступ к методам из другого обьекта к уже созданому обьекту. Правильно? |
Да, всё именно так.
Спустя 4 минуты, 4 секунды (16.12.2011 - 13:38) caballero написал(а):
Цитата |
UML мать его! |
Это еще хуже. как по мне нотация совершенно нечитабельная. Мне проще выучить еще один язык программирования чем запомнить какой тип стрелочки с каким наконечником чего означает
Спустя 18 секунд (16.12.2011 - 13:38) m4a1fox написал(а):
ruzab
Цитата |
Нужно получить доступ к методам из другого обьекта к уже созданому обьекту. |
Хм, ну грубо говоря:
Что мешает сделать так
$obj = new Two (new Three);
Спустя 1 минута, 33 секунды (16.12.2011 - 13:39) m4a1fox написал(а):
caballero
Цитата |
какой тип стрелочки с каким наконечником чего означает |
А я себе тетрадь большую завел по ООП! Туда вписываю что в книге читаю.... и эти стрелочки шли первыми! Теперь каждый раз, когда вижу UML и не помню что стрелочки значат лезу в тетрадь....
Спустя 3 минуты, 30 секунд (16.12.2011 - 13:43) caballero написал(а):
Цитата |
Нужно получить доступ к методам из другого обьекта к уже созданому обьекту. |
или на понятном языке (одна из версий):
Нужно получить доступ к методам уже созданного объекта из другого объекта
или проще :
Нужно получить доступ к методам объекта из другого объекта
(очевидно что если это объект то он уже создан)
Спустя 2 минуты, 27 секунд (16.12.2011 - 13:45) m4a1fox написал(а):
Эээээээ
$obj = new One();
$obj2 = new Two($obj);
Передать в качестве параметра.
$obj = new One();
$obj2 = new Two($obj);
Передать в качестве параметра.
Спустя 23 минуты, 56 секунд (16.12.2011 - 14:09) ruzab написал(а):
Господа, я попробую объяснить на примере:
Так вот теперь мне надо сделать:
Но если я так сделаю, то надо заново присваивать значения переменным $a $b $c. А мне нужны значения этих переменных, которые ранее уже были оперделены в классе B!
class A {
private $a;
protected $b;
public $c;
protected function setA ($a) {
$this->a = $a;
}
protected function getA () {
return $this->a;
}
}
class B extends A {
public function __construct () {
$this->setA(10);
$this->b = 20;
$this->c = 30;
}
}
$m = new B;
Так вот теперь мне надо сделать:
class C extends A{
public function __construct () {
echo $this->getA();
echo $this->b;
echo $this->c;
}
}
$n = new B;
Но если я так сделаю, то надо заново присваивать значения переменным $a $b $c. А мне нужны значения этих переменных, которые ранее уже были оперделены в классе B!
Спустя 4 минуты, 7 секунд (16.12.2011 - 14:13) bodja написал(а):
Цитата (ruzab @ 16.12.2011 - 10:33) | ||
Да, всё именно так. |
Значит так
делаем такой класс
class Class1 {
public $pro='куку<br>';
public function metod1() {
return $this->pro;
}
}
потом такой
class Class2 {
public $obj;
public function metod2() {
return $this->obj->metod1();
}
}
потом создаем обьект первого класса,ну и меняем pro ,чтобы убедится потом ,что мы получили доступ к первому обьекту из другого класса
$obj1=new Class1();
$obj1->pro='прювет! я значение pro1 класса Class1<br>';
Теперь ключевой момент :)
$obj2=new Class2();
$obj2->obj=$obj1;
echo $obj2->metod2();
результат
Цитата |
прювет! я значение pro1 класса Class1 |
Вот и все,если нужны подробности спрашивайте,
можно оформить немного красивее ,через конструкт.
Я выложил ,чтобы понятнее было.
Спустя 8 минут, 58 секунд (16.12.2011 - 14:22) m4a1fox написал(а):
bodja
Как мне кажется с 2 классами проблемы не особо возникнут! Можно даже переписать метод + наследование! А вот с 3 - уже похуже будет!
Как мне кажется с 2 классами проблемы не особо возникнут! Можно даже переписать метод + наследование! А вот с 3 - уже похуже будет!
Спустя 1 минута, 28 секунд (16.12.2011 - 14:24) caballero написал(а):
Разговор слепого с глухим. Теперь понятнее в чем вопрос но народ продолжает писать что знает а не что спрашивают
Цитата |
А мне нужны значения этих переменных, которые ранее уже были оперделены в классе B! |
В такой постановке только статические переменные объявленные в родительском классе A
static protected $a;
Хотя речь шла о доступе к методам. Или это разные вопросы. Фиг поймешь до конца.
Спустя 10 минут, 4 секунды (16.12.2011 - 14:34) m4a1fox написал(а):
Как вариант! Покрасивше!!!
<?php
class A {
private $a;
protected $b;
public $c;
protected function setA ($a) {
$this->a = $a-10;
}
protected function getA () {
return $this->a;
}
}
class B extends A {
public function __construct () {
$this->setA(340);
$this->b = 20;
$this->c = 130;
}
}
class C{
private $strategy;
public function __construct (B $str) {
$this->strategy = $str;
}
}
$t = new C(new B);
echo '<pre>';
print_r($t);
echo '</pre>';
?>
Спустя 6 минут, 50 секунд (16.12.2011 - 14:41) Семён написал(а):
Тип говнокодить пытается, а вы ему показываете конкретные примеры как это сделать)
Если бы не хамство caballero, всем бы уже давно стало понятно)
Если бы не хамство caballero, всем бы уже давно стало понятно)
Спустя 5 минут, 5 секунд (16.12.2011 - 14:46) ruzab написал(а):
Цитата (Семён @ 16.12.2011 - 11:41) |
Тип говнокодить пытается, а вы ему показываете конкретные примеры как это сделать) |
Прошу объяснить - в чем тут говнокод.
Спустя 5 минут, 52 секунды (16.12.2011 - 14:52) bodja написал(а):
Цитата |
Как мне кажется с 2 классами проблемы не особо возникнут! Можно даже переписать метод + наследование! А вот с 3 - уже похуже будет! |
Проблем не возникнет с любым количеством классов,
просто в нужное время подсовываем нужный указатель.
Проблема в том ,что подобные финты делать нежелательно,я уже про это писал неоднократно.
Но в данном случае ТС хоть курит разницу между классом и обьектом ,и разницу между экземплярами одного и того же класса.
Я думаю ТС знает чего именно хочет,и при желании в этом вопросе разберется.
Но пересматривать архитектуру кода,хотя бы в будущем все равно прийдется.
Спустя 7 минут, 55 секунд (16.12.2011 - 15:00) ruzab написал(а):
Всем спасибо! Я для себя много чего понял, аглавное что архитектуру по видимому и вправду надо будет скоро изменять...
Спустя 6 минут, 51 секунда (16.12.2011 - 15:06) m4a1fox написал(а):
ruzab
Значит это не то что вы хотели?
Значит это не то что вы хотели?
<?php
class A {
private $a;
protected $b;
public $c;
protected function setA ($a) {
$this->a = $a-10;
}
protected function getA () {
return $this->a;
}
}
class B extends A {
public function __construct () {
$this->setA(340);
$this->b = 20;
$this->c = 130;
}
}
class C{
private $strategy;
public function __construct (B $str) {
$this->strategy = $str;
}
}
$t = new C(new B);
echo '<pre>';
print_r($t);
echo '</pre>';
?>
Спустя 49 минут, 35 секунд (16.12.2011 - 15:56) caballero написал(а):
Цитата |
Тип говнокодить пытается, а вы ему показываете конкретные примеры как это сделать) |
Говнокод - не страшно - дело опыта. А если показать решение то будет меньше кода а значит и говнокода. Профит!
Тут проблема понять чего показать.
Цитата |
Значит это не то что вы хотели? |
чего он хотел. я написал. Надеюсь угадал
Цитата |
private $strategy; |
Strategy - это наше все. Чуствуется крепкая рука Мета Зандстры

Спустя 1 час, 4 минуты, 48 секунд (16.12.2011 - 17:01) m4a1fox написал(а):
caballero
Цитата |
Чуствуется крепкая рука Мета Зандстры |
Ну а куда девать! Уже почти рефлекс! Не знаю к добру ли... надеюсь что не зря каждый шаблон разбираю по кусочкам!