Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odwołanie do methody rodzica
gcdreak
post 1.07.2009, 14:17:49
Post #1





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Witam!
Mam taką klase:
  1. <?php
  2. class MySPLFileObject extends SplFileObject
  3.    {
  4.        public $fp;
  5.        private $stats = array();
  6.        
  7.        function __construct($file){
  8.            $this->fp = new SplFileObject($file);
  9.            $this->stats = $this->fp->fstat();
  10.        }
  11.        
  12.        public function getFilename(){
  13.            return $this->fp->getFilename();
  14.        }
  15.        
  16.        public function getFileSize(){
  17.            return $this->stats['size'];
  18.        }
  19.        
  20.        public function getCreateTime(){
  21.            return date('Y-m-d G:i', $this->stats['ctime']);
  22.        }
  23.        
  24.        public function getAccessTime(){
  25.            return date('Y-m-d G:i', $this->stats['atime']);
  26.        }
  27.        
  28.        public function getModifyTime(){
  29.            return date('Y-m-d G:i', $this->stats['mtime']);
  30.        }
  31.    }
  32.    
  33.    
  34.    
  35.    $info = new MySPLFileObject('arrayObject.php');
  36.    
  37.    printf(
  38.        "|=== Plik <strong> %s </strong> =============| <br />".        
  39.        "||  <br />".
  40.        "|| ---> Rozmiar [B]: %s <br />".
  41.        "|| ---> Utworzony: %s <br />".
  42.        "|| ---> Urzywany: %s <br />".
  43.        "|| ---> Zmodyfikowany: %s <br />".
  44.        "||  <br />".
  45.        "|=====================================|",    
  46.        $info->getFilename(),
  47.        $info->getFileSize(),
  48.        $info->getCreateTime(),
  49.        $info->getAccessTime(),
  50.        $info->getModifyTime()
  51.    );
  52.    
  53.    echo $info->current();
  54. ?>


Kiedy wywołuje metody klasy SPLFileObject to pojawia mi się informacja o pobraniu pliku?
Mam w kodzie jakiś błąd?
Powód edycji: [Spawnm] poprawiłem bbcode.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
batman
post 1.07.2009, 14:36:22
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Oj namieszałeś, namieszałeś.
Jeśli rozszerzasz jakąś klasę, to nie przesłaniaj jej konstruktora. A jeśli to robisz, to nie twórz kolejnego obiektu, tylko wywołaj konstruktor rodzica:
  1. <?php
  2. parent::__construct($atrybuty_przyjmowane_przez_konstruktor_rodzica)
  3. ?>
Jak już to zrobisz to możesz wywalić s kodu metodę getFilename, ponieważ jest ona wstawiona w tym miejscu bez potrzeby - przecież występuj ona w klasie rodzica.
Resztę będziesz sam w stanie poprawić.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Crozin
post 1.07.2009, 14:37:17
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Po co dziedziczysz po SplFileObject skoro w konstruktorze MySPL... tworzysz nową instancję tego obiektu?
Go to the top of the page
+Quote Post
Pr0100
post 1.07.2009, 19:58:11
Post #4





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

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


  1. <?php
  2. /* ... */ extends SplFileObject /* ... */ new SplFileObject($file); /* ... */
  3. ?>


zdecyduj się na coś albo dziedziczysz (extends) albo tworzysz instancje (new)

Rozwiązanie #1 - dziedziczenie

  1. <?php
  2. function __construct($file){
  3.  parent::__construct($file);
  4.  $this->stats = $this->fstat();
  5. }
  6. ?>


i w całym skrypcie zamień $this->fp-> na $this->

Rozwiązanie #2 - new SplFileObject();

zamień
class MySPLFileObject extends SplFileObject
na
class MySPLFileObject

a zamiast

  1. <?php
  2. $info->current();
  3. ?>


daj

  1. <?php
  2. $info->fp->current();
  3. ?>


oczywiście możesz zrobić metode getCurrent() w klasie MySPLFileObject ale z tym chyba już sobie poradzisz smile.gif

Ten post edytował Pr0100 1.07.2009, 20:00:03


--------------------
Go to the top of the page
+Quote Post
gcdreak
post 2.07.2009, 19:27:23
Post #5





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Zrobiłem tak:
Kod
function __construct($file){
            parent::__construct($file);
            $this->stats = $this->fstat();
        }
        
        public function getFileSize(){
            return $this->stats['size'];
        }


I mam prośbę, aby ktoś mi wytłumaczył jedną istotną kwestie.
Chodzi o $this.
Kazaliście mi zmienić
Kod
return $this->fp->stats(...)
na
Kod
return $this->stats(...)

i w zwiażku z tym moje pytanie:
kiedy należy urzywać samego $this, a kiedy $this->parametr ?
Go to the top of the page
+Quote Post
Crozin
post 2.07.2009, 19:48:03
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Podstawowe pytanie: czy rozumiesz o co chodzi w dziedziczeniu?
Go to the top of the page
+Quote Post
cojack
post 2.07.2009, 20:05:58
Post #7





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Tu nawet nie chodzi o pytanie, czy rozumie o co chodzi w dziedziczeniu, o nie rozumie o co chodzi w programowaniu obiektowym. (Nie twierdze że wszystkie rozumy pozjadałem).


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
gcdreak
post 2.07.2009, 20:45:14
Post #8





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Ciągle się ucze, ale zawsze mnie ciekawiła ta różnica.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:17