Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z klasami (dziedziczenie + singletony)
lolek09
post
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 30.05.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Więc tak. Chciałem zrobić sobie klasę Module, po której dziedziczą wszelkie moduły. Klasa module miałaby mieć metodę getReference() zwracającą metodę do siebie samego. No i ten dziedziczący moduł miałby dziedziczyć tą metodę. I teraz sprawa wygląda tak:
[php:1:4616761559]<?php
class Module
{
private static $myReference;

public function &getReference()
{
if(!isset(self::$myReference))
self::$myReference = new self;
return self::$myReference;
}
}

class User extends Module
{
// Zmienne odpowiadające za różne dane z formularza logowania
public $login;

public function __construct()
{
$this->login = "Foo";
}
}

$normal = new User;
$singleton = User::getReference();
?>
<pre>
<?php var_dump($normal); var_dump($singleton); ?>
</pre>[/php:1:4616761559]

Wynik?
Cytat
object(User)#1 (4) {
 ["login"]=>
 string(3) "Foo"
}
object(Module)#2 (0) {
}


No i nie wiem za bardzo jak zrobić, żeby $singleton było obiektem user. Czy da się wogóle tak zaprojektować klasę Module?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lolek09
post
Post #2





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 30.05.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Faktycznie, lepsze rozwiązanie, dzieki. Ale nie rozumiem o co ci chodziło z tym, że źle by się zachowywało przy wielu obiektach. Ja chciałem, żeby moduły dziedziczyły z Module i dzięki temu każdy z nich dziedziczyłby metodę getReference, więc każdy zwracałby referencję do siebie samego nie zależnie ile byłoby tych obiektów.
Używałbym np.
[php:1:31ad2614a9]<?php
$test1 = User::getReference();
// A nie
$test2 = Module::getReference('user');
?>[/php:1:31ad2614a9]
Ale dzięki, przyjrzę się i przemyślę to jeszcze raz.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 05:35