Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Extensions > Класс в классе


Автор: RailMan 5.11.2006, 11:21
Конечно плохо назвал тему, но все же.. Имею 2 класса А и В. Хочу, чтоб В являлся как бы частью А (можно ли вместо переменной сделать новый объект класса?) и к его полям можно было например обращаться так: A->B->myvar. Это было бы очень полезно. Спасибо

Автор: skifoz 5.11.2006, 11:29
Можно сделать так 
Код

class a
{
    function a() {
        echo "a";
    }
}

class b extends a
{
    function b() {
        echo "b";
    }
}


$b = new b();

$b->a();



Наследуем классу b все функции класса a и теперь можно обращатся к функциям класса a() из b()

еще метод 

Код

class a
{
    function a() {
        echo "a";
    }
}

class b
{
    var $a;
    function __construct() {
        $this->a = new a();
   }
    function b() {
        echo "b";
    }
}



Насчет второго метода не уверен вроде должно работать)


Автор: RailMan 5.11.2006, 11:31
Хм. За это спасибо!!! А вот если мне хочется для красоты и наглядности (=)) сделать две стрелки, то это никак?

Автор: skifoz 5.11.2006, 11:35
Второй вариант который я тебе указал и есть, как ты говоришь, "две стрелки", там чтобы вызвать функцию клсса a() нужно сделать так

$b->a->a();

Автор: RailMan 5.11.2006, 11:54
Огромное спасибо за такой понятный и ШУСТРЫЙ smile отклик. Разобрался

Автор: -=Ustas=- 5.11.2006, 12:05
Код

<?php

class A
{
    var $var1 = 'variable from class A';
    
    function __construct()
    {        
        //....
    }
}

class B
{
    var $classA = '';
    
    function __construct()
    {
        $this->classA =& new A(); 
    }
}

$obj = new B();

echo $obj->classA->var1;

?>


Добавлено @ 12:06 
Усп.. опоздал smile

Автор: CyClon 7.11.2006, 14:53
Прикольная штука, мне как-то на форуме предлагали переписать класс работы с MySQL чтобы вместо так:

$db->sql_query("...");

Было так:

$db->query->sql("...");

Похоже идея была бредовая, код жесть получится.

Автор: Nicholas_S 7.11.2006, 16:26
-=Ustas=-, начиная с PHP5 создавать объект по ссылке не обязательно.  smile 

Автор: check 7.11.2006, 17:19
А внутренние(и анонимные) классы в PHP5 не появились?
Там много заимствований из Java по части ООП, может и это есть? 

А то удобно - вместо того чтобы наследовать новый класс от базового
просто помещаем его внутрь,  как и хотел RailMan. 

Автор: -=Ustas=- 7.11.2006, 18:56
Цитата(Nicholas_S @  7.11.2006,  16:26 Найти цитируемый пост)
-=Ustas=-, начиная с PHP5 создавать объект по ссылке не обязательно. 

Я в курсе, что объекты по дефолту по ссылке передаются, просто на всякий случай написал  smile 

Автор: Mal Hack 7.11.2006, 20:03
Цитата(check @  7.11.2006,  17:19 Найти цитируемый пост)
А внутренние(и анонимные) классы в PHP5 не появились?

Такого вроде нема.

Автор: GZep 14.2.2007, 13:44
Цитата(check @  7.11.2006,  17:19 Найти цитируемый пост)
А внутренние(и анонимные) классы в PHP5 не появились?

А если вот так?
Код

class a
{
    function a() {
        echo "a";
    }
}
class b
{
    private $a;
    function __construct() {
        $this->a = new a();
   }
    function b() {
        echo "b";
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)