Как передать переменную другому классу в php

Статус
В этой теме нельзя размещать новые ответы.

sashalg

Читатель
Заблокирован
Регистрация
21 Мар 2008
Сообщения
49
Реакции
7
  • Автор темы
  • Заблокирован
  • #1
Привет Всем!
Столкнулся с такой проблемой... Необходимо передать переменную из одного класса в другой.
Пример:

Код:
[B]class[/B] A {
  [B]public[/B] $Odin = "";

  [B]function[/B] test(){
    [B]echo[/B] $this->Odin;
  }
}

[B]class[/B] B {
  [B]public[/B] [COLOR="RoyalBlue"]$Dva[/COLOR] = "";

  [B]function[/B] prnt(){
    // здесь надо передать данные в класс A
    // переменную $this->Dva
  }
}

  [COLOR="RoyalBlue"]$a[/COLOR] = [B]new[/B] A;
  [COLOR="RoyalBlue"]$b[/COLOR] = [B]new[/B] B;

  [COLOR="RoyalBlue"]$b->Dva[/COLOR] = [COLOR="DarkOliveGreen"]"testing"[/COLOR];
  [COLOR="RoyalBlue"]$b->prnt()[/COLOR];
  [COLOR="RoyalBlue"]$a->test()[/COLOR];

Вот такая замануха.
 
так что ли?
PHP:
class A {
  public $Odin = "";

  function test(){
    echo $this->Odin;
  }
}

class B {
  public $Dva = "";

  function prnt(){
    // здесь надо передать данные в класс A
    // переменную $this->Dva
    $GLOBAL['a']->Odin=$this->Dva;
  }
}

  $a = new A;
  $b = new B;

  $b->Dva = "testing";
  $b->prnt();
  $a->test();
 
  • Автор темы
  • Заблокирован
  • #3
В том то и дело, что $a - нельзя заранее предугадать, то есть класс B не может изначально знать с каким именем будет объект класса A. Соответственно $GLOBAL['a']->Odin=$this->Dva; не применимо. Но наверное есть же другое решение?
 
А почему бы не делать так:
PHP:
$a = new A;
$b = new B;
$b->Dva = "testing";
$a->Odin = $b->Dva;
?
 
  • Автор темы
  • Заблокирован
  • #5
А почему бы не делать так:
PHP:
$a = new A;
$b = new B;
$b->Dva = "testing";
$a->Odin = $b->Dva;
?

Такое решение конечно простое... НО!
При множестве классов возникает необходимость передачи переменных из класса в класс не используя такой метод...

то есть класс B не может изначально знать с каким именем будет объект класса A.

Добавлено через 7 минут
Даже пробовал так:

Код:
[B]class[/B] A {
  [B]static public[/B] $Odin = "";

  [B]function[/B] test(){
    echo self::$Odin;
  }
}

[B]class[/B] B {
  [B]public[/B] $Dva = "";

  [B]function[/B] prnt(){
     A::$Odin = $this->Dva;
  }
}

  $b = [B]new[/B] B;
  $b->Dva = "testing";
  $b->prnt();

  $a = [B]new[/B] A;
  $a->test();

Но тут проблема... После инициализации класса A я могу повлиять только на все переменные объекты класса A...
 
а если классу б пердать ссылку на экземпляр а?
PHP:
<?php
class A {
  public $Odin = "";

  function test(){
    echo $this->Odin;
  }
}

class B {
  public $Dva = "";


  function prnt(){
	$this->a->Odin = $this->Dva;
    // здесь надо передать данные в класс A
    // переменную $this->Dva
  }
}

  $a = new A;
  $b = new B;
  $b->a =& $a;

  $b->Dva = "testing";
  $b->prnt();
  $a->test();
?>
 
  • Автор темы
  • Заблокирован
  • #7
Это будет по сути тоже, что и
Код:
$a->Odin = $b->Dva;

Блин... Уже голова болит...

Остаётся только два варианта:
1. Использовать static и мирится с его глобальными изменениями.
2. Передавать вручную типа $a->Odin = $b->Dva; или $b->a =& $a;

Ндааа... Не утешительно... :confused:
 
не совсем одно и тоже
$a->Odin = $b->Dva; или $b->a =& $a;
во втором случае передача переменной осуществляется внутри класса
и передавать можно сколько угодно переменных и где угодно в программе
достаточно вызвать $b->prnt();


а статические и суперглобальные перменные это неправильно, противовечит принципам ООП.
За это на лабах по С++ по башке давали :)
 
  • Автор темы
  • Заблокирован
  • #9
не совсем одно и тоже
$a->Odin = $b->Dva; или $b->a =& $a;
во втором случае передача переменной осуществляется внутри класса
и передавать можно сколько угодно переменных и где угодно в программе
достаточно вызвать $b->prnt();

Я тут поковырял твоё предложение... и соглашусь с тобой... На данный момент это намного лучший вариант.

а статические и суперглобальные перменные это неправильно, противовечит принципам ООП.
За это на лабах по С++ по башке давали :)

Это я в курсе... Я и сам на C++ писал. Именно по этой причине не хочу использовать статические методы.

Добавлено через 8 минут
Просто объясню подробней, что я хочу:

PHP:
  class A {
    static public $Odin;

    function test(){
      echo self::$Odin;
    }
  }

  class B {
    public $Dva;

    function prnt(){
      A::$Odin = $this->Dva;
    }
  }


  class C {

    function add_obj($name, $class_name){
      eval('$this->'.$name.' = new '.$class_name.'();');
    }
  }

  $c = new C;
  $c->add_obj('a','A');
  $c->add_obj('b','B');

Вот... а теперь хочу заставить их (классы $a и $b) обмениваться между собой данными.
Например, если я вызываю какуюто функцию класса $b и она, понятное дело, что-то делает, должно отразится на обеих классах.
 
а что мешает создать классах методы обмена и в них помещать данные?.. или создать третий для обмена и от него наследовать А и В..
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху