Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 0 Dołączył: 22.04.2003 Skąd: Żory / K-ce Ostrzeżenie: (0%)
|
[php:1:9afb1fe096]
class AbstractSingleton { static function instance() { static $instance; if (!$instance) { // nie mogę napisać $this, bo metoda jest statyczna $class = self::getClassName(); $instance = new $class; } return $instance; } } class test extends AbstractSingleton { function getClassName() { return 'test'; // edit: skądś tutaj wziąłem 'test2' } } test::instance(); [/php:1:9afb1fe096] wywala błąd: Fatal error: Call to undefined method abstractsingleton::getclassname() in E:usrwwwssiindex.php on line 12 Testowałem na PHP5 b2 i b3, z i bez słowa kluczowego "static" na początku metody. Podmieniałem self na $this, this i bez skutku. Niby dobrze, bo self:: służy do wywołania metody klasy w której jestem, używa się jej przy nadpisywaniu. Wobec tego jakiego słowa mam użyć zamiast "self", jest jakiś odpowiednik $this bez "$" do użycia w metodach statycznych? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 0 Dołączył: 22.04.2003 Skąd: Żory / K-ce Ostrzeżenie: (0%)
|
Proteza też okazała się spieprzona, bo get_class(test::instance()) == get_class(test2::instance()) - zmienna statyczna jest dzielona w obrębie całego drzewa klas. Inna proteza, już działająca:
[php:1:2e43b9dedd] class AbstractSingleton { function instance($class) { static $instance[$class]; if (!isset($instance[$class])) $instance[$class] = new $class; return $instance[$class]; } } [/php:1:2e43b9dedd] Działa, ale jest wolniejsza, bo przy każdym odwołaniu szuka obiektu w tablicy... |
|
|
|
Nalfein][WR słowa kluczowe parent, self.. brakuje mi jednego :) 2.01.2004, 19:33:39
bamboos Witam!!
Zupełnie się nie znam na programowaniu obi... 3.01.2004, 02:15:43
DeyV Przy takim zapisie wydaje mi się, ze możliwe jest ... 3.01.2004, 02:35:05
Nalfein][WR No własnie. Brakuje takiego słowa w stylu "final",... 3.01.2004, 12:14:12
Nalfein][WR Póki co wymyśliłem protezę, podaję w razie czego:
... 3.01.2004, 15:18:56 ![]() ![]() |
|
Aktualny czas: 25.12.2025 - 22:06 |