Вызов метода класса из другого класса.

AngelZP

Новичок
Вызов метода класса из другого класса.

В общем то есть код:

index.php

PHP:
include('lib/core.inc.php');
$CORE = new CORE();
include('lib/client.inc.php');
$OBJ = new $_GET['object']($CORE);
core.inc.php
PHP:
class CORE
    {
	var $VARS;
	function CORE()
	{
	    $this->VARS['number_query']=0;
	}
	function query($value)
	{
	    ......... #обработка запроса
	}
client.inc.php
PHP:
class CLIENT
    {
	function CLIENT($obj) 
	{
	    $this->VARS['_CORE']=&$obj;
	}
	function addclient()
	{
	    $result=$this->VARS['_CORE']->query('запрос')
            ........
        }
     }
Смысл в следующем - в зависимости направления работы - создается свой объект. Один выполняет операции с клиентам, второй с железом, третий с вебом, ну и так далее...

К примеру создается класс CLIENT.В данной ситуации при создании объекта происходит копирование объекта CORE. Как избежать этого но, оставить похожий функционал (вызов методов класса CORE в других класса)?

Может быть какая-то другая идея будет, как организовать работу?

PHP 4.4.7
 

AmdY

Пью пиво
Команда форума
Re: Вызов метода класса из другого класса.

Автор оригинала: AngelZP
Один выполняет операции с клиентам, второй с железом, третий с вебом, ну и так далее...
это как?
 

AngelZP

Новичок
Re: Re: Вызов метода класса из другого класса.

Автор оригинала: AmdY
это как?
В общем то объект CORE содержит в себе необходимые методы - запрос к БД, авторизацию пользователя, ведение статистики, логирование действий пользователя и т.д.

Все объекты - созданные для работы (к примеру объект CLIENT - работа с записями о клиенте) - обращаются к КОРЕ по мере необходимости вызова функций, необходимых для работы. Но в настоящий момент они работают с копией коры.
Код из core.inc.php метод класса:
PHP:
	function db_query($query)
	{
	    $this->VARS['number_query']++;
	    return mysql_query($query,$this->VARS['db_link']);
	}
При дебаге видно, что $this->VARS['number_query'] - увеличивается.

При вызове
PHP:
$CORE->print_statistic()
в index.php - после отработки объекта CLIENT - выводиться 0.
Код из core.inc.php метод класса:
PHP:
function print_statistic()
	{
	    print "<br><font face='Verdana' size='1' color='black'><b>Количество запросов к базе:</b>
".$this->VARS['number_query']."</font><br>";
	}
 

dimagolov

Новичок
Re: Вызов метода класса из другого класса.

Автор оригинала: AngelZP
Смысл в следующем - в зависимости направления работы - создается свой объект. Один выполняет операции с клиентам, второй с железом, третий с вебом, ну и так далее...
PHP 4.4.7
а зачем все это надо, я так и не понял. вообще похоже на перегружаемые методы, то есть делаем один базовый класс и потомков с переопределенными методами. создаем объект нужного класса а потом единообразно обращаемся к методам не задумываясь что же именно за объект там.

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

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума

AmdY

Пью пиво
Команда форума
лучше погугль в плане MVC, ты как-то не так приложение строишь
 

AngelZP

Новичок
Re: Re: Вызов метода класса из другого класса.

Автор оригинала: dimagolov
а зачем все это надо, я так и не понял. вообще похоже на перегружаемые методы, то есть делаем один базовый класс и потомков с переопределенными методами.
Про потомков речь не шла :) Это совершенно разные классы.

Объект кора - служебный - он содержит функции - необходимые всем класам для работы.
Хм.. Пока писал - задумался над наследованием :) Возможно упустил момент с наследованием.

Остальные объекты содержат только необходимые функции в даном конкретном случае (обработка клиента)

Автор оригинала: dimagolov
создаем объект нужного класса а потом единообразно обращаемся к методам не задумываясь что же именно за объект там.
Вообще-то обращение идет к копии класса КОРА

Автор оригинала: dimagolov
но вот удивляет то, что пытаетесь смешать в одну кучу самые разные абстракции, так никто в общем не делает...
Я давно не писал :) Сча пытаюсь вспомнить старые навыки :)

Я уже полез в эту сторону - пытаюсь понять - что к чему..

Автор оригинала: dimagolov
AngelZP, читай ман про ссылки и как их использовать
Этого не совсем понял? К чему ссылки и вызов объектов класса? Ткните носом плз.

Автор оригинала: AmdY
лучше погугль в плане MVC, ты как-то не так приложение строишь
Спасибо. Пшел курить ГУГЛ...

Простое описание задачи выглядит так:

Созданы два объекта - независимых друг от друга
PHP:
class a
{
   function foo()
  {
  }
}
class b
{
   function bar()
  {
  }
}
$a=new a();
$b=new b();
Как правильно в методе bar() объекта b вызвать метод foo объекта a?

Спасибо за ответы - пшел читать...
 

AmdY

Пью пиво
Команда форума
ты же сам писал
$result=$this->VARS['_CORE']->query('запрос')
или не работает
 

AngelZP

Новичок
Автор оригинала: AmdY
ты же сам писал
$result=$this->VARS['_CORE']->query('запрос')
или не работает
Работает, но при этом создается копия объекта КОРА. Это то меня и не устраивает :(
В этом посте расписано, что при вызове метода из другого класса - переменная увеличивается, а при завершении работы класса - в ней показывается значение, которое было до передачи ссылки на объект. Т.е. создается копия.
 

dimagolov

Новичок
Re: Re: Re: Вызов метода класса из другого класса.

Автор оригинала: AngelZP
Этого не совсем понял? К чему ссылки и вызов объектов класса? Ткните носом плз.
Ссылки это про оператор & который в Вашем коде встречается но, не совсем там где надо. Если поставить там, где надо, то все заработает как задумывалось.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ссылки это про оператор & который в Вашем коде встречается но, не совсем там где надо. Если поставить там, где надо, то все заработает как задумывалось.
А если воспользоваться поиском, как задумывалось и описывалось в правилах...
 

AngelZP

Новичок
Понял ужо :) Спасибо:)

-~{}~ 24.07.07 03:47:

В общем то вот ответ...:)
PHP:
<?
class A
{
    var $VARS;
    function A()
    {
	$this->VARS['0']='0';
	$this->VARS['1']='0';
    }
    function set1()
    {
	$this->VARS['1']=1;
    }
    function printA()
    {
	print $this->VARS['0'];
	print $this->VARS['1'];
    }
}
class B
{
    var $VARS;
    function B(&$a)
    {
	$this->VARS['_A']=&$a;
    }
    function printB()
    {
	$this->VARS['_A']->printA();
        $this->VARS['_A']->VARS['1']=2;
    }
}
$a = new A();
$b = new B($a);
$a->printA();
print '<br>';
$b->printB();
print '<br>';
$a->set1();
print '<br>';
$a->printA();
print '<br>';
$b->printB();
print '<br>';
$a->printA();
?>
Всем спасибо - выручили, а то ужо ломать собрался :)


AmdY
- спасибо - пошел думать над построением:)
 

Bakti9rov

!*|=?
если в ПХП5 - все свойства и методы сделать статическими, а класс описать как abstract - модификатор запрещает создавать экземпляры класса, но вызывать статические методы в стиле неймспейсов уже можно.
 
Сверху