Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nazwa klasy dziedziczącej
Forum PHP.pl > Forum > PHP > Object-oriented programming
zmszaman
Witam!

Jak zrobić żeby zamiast Base wyswietlało mi sie T w poniższym kodzie? Oczywiście po klasie Base będzie dziedziczyło więcej klas więc odpada wpisanie na sztywno T

  1. class Base {
  2. static public function getInstance( ) {
  3. echo __CLASS__;
  4. }
  5. }
  6. class T extends Base {}
  7. T::getInstance();
Ociu
  1. class Base {
  2. static public function getInstance( ) {
  3. echo __CLASS__;
  4. }
  5. }
  6. class T extends Base {
  7. static public function getInstance( ) {
  8. echo __CLASS__;
  9. }
  10. }
  11. T::getInstance();
  12. Base::getInstance();
zmszaman
A bez nadpisywania tej metody jest jakaś możliwość?
wookieb
Nie, ponieważ
Cytat
Static references to the current class like self:: or __CLASS__ are resolved using the class in which the function belongs, as in where it was defined:

http://pl2.php.net/manual/pl/language.oop5...ic-bindings.php
-=Peter=-
W php 5.3 wprowadzono nowy operator static, przykładowo:

  1. <?php
  2.  
  3. class Base {
  4. static public function getInstance( ) {
  5. echo static::getClass();
  6. }
  7.  
  8. static public function getClass(){
  9. echo __CLASS__;
  10. }
  11. }
  12. class T extends Base {
  13. static public function getClass(){
  14. echo __CLASS__;
  15. }
  16. }
  17.  
  18. T::getInstance();

Ale i tak to na jedno wychodzi w tym przypadku ;]
taktu
Jeśli będziesz tworzył obiekt to get_class( $this );
http://www.php.net/manual/en/function.get-class.php

Jeżeli chcesz wywoływać statycznie to get_called_class(); od php 5.3.0
http://php.net/manual/en/function.get-called-class.php
zmszaman
Dziękuje za pomoc. Skorzystałem z get_called_class ale pod php 5.2 (była w komentarzach zdefiniowana ta funkcja).
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.