Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odwołanie do methody rodzica
gcdreak
post
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
batman
post
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ć.
Go to the top of the page
+Quote Post
Crozin
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Pr0100 1.07.2009, 20:00:03
Go to the top of the page
+Quote Post
gcdreak
post
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
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
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).
Go to the top of the page
+Quote Post
gcdreak
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 08:48