Forum Webscript.Ru
		Программирование => PHP => Тема начата: new_coder от 19 Ноября 2007, 12:15:57
		
			
			- 
				необходимо вызывать методы класса $A из классов $B и $C причем $A не является базовых для $B и $C и не составляет с ними часть одной сущности.
 
 
 
 //работа с базой
 class $A
 {
 }
 
 // работа с выводом страниц
 class $B
 {
 
 
 private $DB
 function  __conctructor($DB)
 {
 $this->DB = $DB;
 }
 
 function metod1()
 {
 $this->DB->metoddb();
 }
 
 }
 
 //работа с модулями
 class $C
 {
 private $DB
 function __conctructor($DB)
 {
 $this->DB = $DB;
 }
 
 function metod1()
 {
 $this->DB->metoddb();
 }
 
 }
 
 
 верное ли это решение или есть другое ?
- 
				class $A 
 А писать по нормальному можно?
 вот пример, так вообще и делается, но только в PHP 5. Но в PHP 4 надо линками передавать обьекты. тоесть на PHP 4 этот пример работать не будет.
 
 class aaa{
 private $x=5;
 function metoddb($a){
 echo $this->x;
 $this->x=$a;
 }
 }
 // работа с выводом страниц
 class bbb{
 private $DB;
 function  bbb($DB)
 {
 $this->DB = $DB;
 }
 
 function metod1()
 {
 $this->DB->metoddb(6);
 }
 }
 //работа с модулями
 class ccc{
 private $DB;
 function ccc($DB)
 {
 $this->DB = $DB;
 }
 
 function metod1()
 {
 $this->DB->metoddb(7);
 }
 
 }
 $a=new aaa;
 $b=new bbb($a);
 $c=new ccc($a);
 $b->metod1();
 $c->metod1();
 
- 
				я имел ввиду другой способ. Можно не тащить по всему коду в конструкторах указатель на класс $A? (PHP 5)
			
- 
				Вот она - одна из проблем, вызванных тем, что PHP не типизирован. В нормальном языке, хотя бы в том же ActionScript, хехе, не возникает вопроса, надо ли писать public var x:String, то есть таскать String везде.
 
 Нужно тащить. Обязательно.
- 
				нашел подходящее решение с использованием статических методов:
 
 класс $A использует только статические методы, тогда можно писать так:
 
 
 //работа с базой
 class $A
 {
 public static metodDB()
 {
 ///
 }
 }
 
 // работа с выводом страниц
 class $B
 {
 function metod1()
 {
 A::metodDB();
 }
 }
 
 
 //работа с модулями
 class $C
 {
 function metod1()
 {
 A::metodDB();
 }
 }
 
- 
				если класс $A использует только статические методы
			
- 
				Не обязательно. Если в методе $A используется $this>xxx, 
 то и после  A::metodDB();  будет работать, только уже с данным классом, иногда очень удобно.
- 
				Да, я соврал.
 Мне стыдно.