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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП 
:(
    Опции темы
Zorak
Дата 25.11.2013, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем здрасвуйте. И так, есть проблема: Пусть есть два класса: 
Код

class c1()
{
}

class c2()
{
}

Сами классы описаны в двух разных файлах: class.c1.php и class.c2.php

Случилось так, что методы, которые описаны в с1 используются в с2, и наоборот - методы, которые есть в с2 нужны в с1. И так, я в обоих файлах пишу приблизительно такое:
Код

<?php
c1:
require_once('class.c2.php');

class c1
{
public $name1;

public function __construct()
{
  $this -> name1 = new c2();
}
}

c2:
require_once('class.c1.php');

class c2
{
public $name2;

public function __construct()
{
  $this -> name2 = new c1();
}
}
// дальше идет код 


В итоге полчучается что мои 64МБ памяти в PHP не хватает для исполнения скрипта, потому что при вызове разных методов что в том что в том классе постоянно создаются новые екземпляры классов, которые забирают всю память. 
в этот момент я вспоминаю про шаблон Singleton, который исключает данную возможность. Мои коды теперь выглядят примерно так:
Код

c1:
require_once('class.c2.php');

class c1
{
private function __construct()
{
  // Что то там.
}

static public function Instance()
{
static $name1;

    if (!isset($name1))
    {
        $name1 = new HtmlManager();
    }
    return $name1;

}
}

// в c2.php тоже самое...


И так вопрос: как мне из класса c2 например создать обьект класса c1 при таком подходе ?? Или я не правильно подошол (ну и + как выправить)

P.S. Если чтото не понятно, пишите, буду обьяснять. Спасибо.


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
ksnk
Дата 25.11.2013, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

Репутация: 96
Всего: 386



как "на самом деле" должны быть связаны классы? Достаточно ли одного экземпляра каждого класса или они (классы) зависят друг от друга.

В качестве телепатического упражнения, буду считать , что каждому объекту класса с1 нужен собственный,отдельный класс с2, а этому объекту с2 достаточно своего "коллеги"-с1.

Тоесть конструктор примерно такой

Код

class c1
{
/** c2 c2 */
function __construct($с2=null)
{
     if (empty($c2)) $c2=new c2(this);
     $this->name1=$c2;
}

}


Код

class c2
{
/** c1 c1 */
function __construct($с1=null)
{
     if (empty($c1)) $c1=new c1(this);
     $this->name1=$c1;
}

}


?

Это сообщение отредактировал(а) ksnk - 25.11.2013, 20:08


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Zorak
Дата 25.11.2013, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ksnk, отложу свой ответ на твой. У меня появилась новое обстоятельство. В принципе у меня с памятью стало все нормально, когда я вписал деструктор:
Код

public function __destruc()
{
 unset($name1)
}


тоесть:
Код

class c1
{
private $name1;
public function __costruct()
{
  $this -> name1 = new c2();
}

public function __destruct()
{
unset($name1);
}
}


Будет ли правильным такое решение?

Добавлено через 8 минут и 38 секунд
А нет, проблема не исчезла.... -=).... Хорошо.. смотри.... для наглядного примера пусть будет два класса Html и Code (class.Html.php   ---   class.Code.php) В первом содержится исключительно Html код, у втором содержится все if, while, for и т п..... Т.е.
Код

Html.php
function __construct()
{
$this -> code = new code();
}

function Method1()
{
$ID = $this -> code -> GetID();
// тоже куча хтмл кода
echo "<input type = 'submit'>";
echo $ID;
// тоже куча хтмл кода
}

function Method2()
{
$ID = $this -> code -> GetID();
// тоже куча хтмл кода
echo "<input type = 'submit'>";
echo $ID;
// тоже куча хтмл кода
}


Код

Code.php
function __construct()
{
$this -> html = new html();
}

function Method1()
{
if ($x == 1)
$this -> html -> ShowForm1(); else
if ($x == 2)
$this -> html -> ShowForm2(); 
}

function Method2()
{
if ($y == '+')
 $this -> html -> ShowSelect(); else
if ($y == '-')
 $this -> html -> ShowRadio(); 
}


Ну вот примерно так у меня связаны два класса. 


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
ksnk
Дата 25.11.2013, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

Репутация: 96
Всего: 386



Цитата(Zorak @  25.11.2013,  20:26 Найти цитируемый пост)
Будет ли правильным такое решение? 

Интересный вопрос. Вот дощечка , выкрашенная в зеленый цвет. Она правильная или нет?
Смотря для чего. Если в костер положить, то можно не красить, если скамейку строить, то нужно распилить на несколько частей.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Fortop
Дата 26.11.2013, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Zorak @  25.11.2013,  20:26 Найти цитируемый пост)
 для наглядного примера пусть будет два класса Html и Code (class.Html.php   ---   class.Code.php) В первом содержится исключительно Html код, у втором содержится все if, while, for и т п.

Я вот не понял этой логики...


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
georgiy11
Дата 26.11.2013, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Человек пытается сделать контроллер с рендерингом одинаковых шаблонов в разных контекстах, если правильно понял, велосипед MVC.
Что мешает передавать в методы сам объект Code?
Code.php
Код

function __construct()
{
$this -> html = new html();
}
function Method1()
{
if ($x == 1)
$this -> html -> ShowForm1($this); else
if ($x == 2)
$this -> html -> ShowForm2($this); 
}
function Method2()
{
if ($y == '+')
 $this -> html -> ShowSelect($this); else
if ($y == '-')
 $this -> html -> ShowRadio($this); 
}


Это конечно полная ерунда, но хотя бы нет постоянных инициализаций перевязанных между собой.
PM MAIL   Вверх
Gromdron
Дата 28.11.2013, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вы неправильно поняли ООП, если у вас методы одного класса затрагивают методы другого класса.

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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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