класс в классе

SA739

Cogito, ergo sum
класс в классе

подскажите возможно ли использовать подключение класса (набор типизированных функций) к классу с целью использования некоторых функций.
а то бьюсь бьюсь.. уже глаза повылазили..
то переменных не видно в функции, хотя на экран она выводится..
PHP:
class Calendar {
function SetFont()
	{
		include ("./db.php"); 
		include ("./config_db.php");
		echo $dbtype;
		initdb();
	}
}
функция initdb() вываливает Unknown DBType: хотя эхо тип базы выдает.. ну в общем все далее в подобном духе..

подскажите что я не так делаю..
и где подробно описана специфика работы с классами методами и объектами классов..
 

tony2001

TeaM PHPClub
переменные будут видны только в этой функции, а все остальное будет везде видно.
нужные переменные делай global
 

gudzon

Guest
на сколько я понял тебе нужно следующее:
class Calendar extends название_родительского_класса {
пишешь новые методы
}
 

SA739

Cogito, ergo sum
дело в том, что я пробовал не подключать конфиг для доступа к БД а задавать переменные в родительском классе, так:
PHP:
class Calendar { 
var $dbtype = "mysql";
var $dbhost ="localhost";
.......
.......

function SetFont() 
    { 
        include ("./db.php"); 
        include ("./config_db.php"); 
        echo $dbtype; 
        initdb(); 
    } 
}
[/[php]
вызов класса вываливает: mysql Unknown DBType: 
чертовщина какая-то (((:
но запарила меня конкретно....
 

SA739

Cogito, ergo sum
Автор оригинала: gudzon
на сколько я понял тебе нужно следующее:
class Calendar extends название_родительского_класса {
пишешь новые методы
}
на сколько я понял мне такое не подойдет (хотя с классами ранее не сталкивался...)

мне нужно в одном из методов существующего класса функцию , которая устанавливала бы цвет фонта в зависимости от данных находящихся в БД.
родительский класс писал ессно не я...:( к сожалению еще совсем зеленый..:(
 

tony2001

TeaM PHPClub
SA,
такой код в принципе работать не будет =)
ты объект класса создая для начала, а потом его атрибуты бери.
но объект, опять же, будет виден только функции, если не будет объявлен global
 

SA739

Cogito, ergo sum
To Tony,
если тебе не составит труда приведи пожалуйста пример реализации следующей конструкции
имеется класс Calendar в нем три метода, в одном из них, выводящем сам календарь мне нужно ввести функцию, SetFont() которая выбирает из БД (используя функции из класса db.php для которого конфигом в свою очередь является отдельный файл) некоторые данные преобразует их , и в зависимости от результата устанавливает значения некоторых переменных в методе класса Calendar Show().
 

tony2001

TeaM PHPClub
PHP:
//тупой пример
class DB {
...
}

class Calendar {
  var $db;
  function Calendar(&$db) {
   //проверки пропускаем
   $this->db = $db;
  }

  function setFont () {
    $result = $this->db->getSomeInfoFromDB();
    $this->info = $result['info'];
  }

  function show () {
   if ($this->info == 'вай-вай') {
    echo "огого";
   }
   else {
    echo "hmmm";
   }
  }
}

$db = new DB();
$calendar = new Calendar($db);
$calendar->setFont();
$calendar->show();
 

Said

Guest
PHP:
function Calendar(&$db) {
   //проверки пропускаем
   $this->db = &$db;
}
лучше так а то $db все ж скопируется ..
 

ElectroNik

Guest
Не понял. А простым наследованием этого нельзя сделать???
 

ElectroNik

Guest
Объясните плиз почему здесь не будет работать наследование..
 

ElectroNik

Guest
в теории- создаем класс Calendar наследуем от родителя DB. и в дальнейшем сождаем лишь один объект Calendar. Почему не будет работать??
 

tony2001

TeaM PHPClub
наследовать что от кого?
Календарь от Базы?
гм... что-то типа "Лондон - столица Парижа".
это не родственные объекты.
 

SA739

Cogito, ergo sum
проблему решил так:
PHP:
	function Db()
	{
		global $dbhost, $dbuser, $dbpass, $dbname;
		$link=mysql_connect($dbhost, $dbuser, $dbpass) or die ("Cant connect".mysql_error());
		mysql_select_db($dbname, $link) or die ("Cant select db".mysql_error());
		return $link;
	}

	function SetFont()
	{
		$link = $this->Db();
		$q1 = mysql_query("SELECT * FROM b_weekend;", $link);
		$q2 = mysql_query("SELECT * FROM b_holiday;", $link);
		while ($r1 = mysql_fetch_row($q1)) {$dwh['weekend'][] = $r1[0];}
		while ($r2 = mysql_fetch_row($q2)) {$dwh['holiday'][] = $r2[0];}	
		return $dwh;
	}
добавил функции в класс Calendar и отказался от использования класса БД.

на сколько я понимаю это решение крайне грубое, но тем не менее рабочее (:)
 

tony2001

TeaM PHPClub
м-дя..
"Родила царица в ночь не то сына, не то дочь, не мышонка, не лягушку, а неведому зверушку"(с)....
не то календарь, не то объект базы..
 

SA739

Cogito, ergo sum
to Tony.
ну ладно тебе ((:) какраз на лягушку смахивает на все сто (:)
 

SA739

Cogito, ergo sum
я не понял до конца, как набор функций, перечисленный в db.php плюс конфиг - config_db.php приделать к классу calendar_class.php

но! торжественно обещаю разобраться что к чему... (:)
 
Сверху