Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]instancja klasy w klasie
Forum PHP.pl > Forum > Przedszkole
Gość
Dlaczego konstrukcja taka:

Kod
<?php

include "klasa_a.php";

$a= new A();

$a= new A();

?>


klasa_a.php

Kod
<?php
class A
{
    function __construct()
    {
        include "klasa_b.php";
        $b= new b();

    }
    
}


?>


wywala błąd PHP Fatal error: Cannot redeclare class b

a konstrukcje

Kod
<?php

include "klasa_a.php";

$a= new A();

$a= new A();

?>


klasa_a.php

Kod
<?php
class A
{
    function __construct()
    {
        
    }
    
}


?>


i

Kod
<?php

include "klasa_a.php";

$a= new A();

?>


klasa_a.php

Kod
<?php
class A
{
    function __construct()
    {
        include "klasa_b.php";
        $b= new b();

    }
    
}


?>


działa poprawnie ?
michalg
Bo plik klasa_b zostaje dwa razy zaincludowany. Include może includować dany plik wiele razy, dlatego dostajesz błąd, że chcesz ponownie zadeklarować klasę B. Jeśli już musisz (dlaczego ?) includować w konstruktorze, to użyj include_once.
Gość
Ok działa. Chciałem zapytać bardziej o poprawnośc takiej konstrukcji załóżmy że klasa A to klasa ktora ma utworzyć całą strukturę strony, metoda wyswietl ma wyswietlic dane w postaci tabeli html .

Klasa B odpowiedzialna jest za łączenie się z bazą, jedna ze jej metod wyswietl zwraca wynik zapytania . Który ze sposobów jest poprawny a może żaden z nich i powinno się to robić w zupełnie inaczej ? Zaznaczam że nie jest to prawdziwy problem chodzi mi o samą zasadę.


Przykład 1

Kod
<?php

include "klasa_a.php";

$a= new A();
$a->wyswietl("A");

$a=new A();

$a->wyswietl("B");




?>


Kod
<?php
class A
{
    
    function wyswietl($par)
    {
      include_once "klasa_b.php";
        $b= new b();
       echo "Wyswietlony w postaci tabeli ". $b->wyswietl($par);
    }
    
}


?>


Kod
<?php
class B
{

    function wyswietl($par)
    {
       if ($par=='A')
       return "Wynik zapytania A";
       if ($par=='B')
       return "Wynik  B";

    }
}
?>





Przykład 2

Kod
<?php

include "klasa_a2.php";
include "klasa_b2.php";

$a= new A();
$b=new B();
$a->wyswietl($b->wyswietl('A'));


$a= new A();
$b=new B();
$a->wyswietl($b->wyswietl('B'));





?>



Kod
<?php
class A
{

    function wyswietl($par)
    {
     echo "Wyswietlony w postaci tabeli ".$par;
    }

}


?>


Kod
<?php
class B
{

    function wyswietl($par)
    {
       if ($par=='A')
       return "Wynik zapytania A";
       if ($par=='B')
       return "Wynik B";

    }
}
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.