Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rodzic nie zwraca alementów
Forum PHP.pl > Forum > PHP
karis
mój problem jest dziwny, otóż w klasie dziedziczonej nie chciałbym mieć tego samego konstruktora co w rodzicu.
zatem utworzyłem nowy konstruktor

jednak inicjacja konstruktora z rodzica jest wymagana, by zwrócić mi odpowiednie dane w klasie dziedziczonej.
(konstuktor mam argumentowy), być może dlatego nie zwraca mi obiektu pxml.

Załączam kod

http://wklej.to/kDcj


proszę o jakieś pomysły jak wykonać, by w klasie XML, metoda debug() zwracała mi obiekt pxml z klasy Upload
Fifi209
To w klasie potomnej wywołujesz tak jak zwykłą metodę...

parent::__construct()

Co do tego typu spraw:
  1. <?php
  2. return false;
  3.             $this->blad = 'Przesylany plik jest niepoprawny';
  4. ?>


$this->blad
będzie zawsze puste... winksmiley.jpg
Pr0100
  1. <?php
  2. class XML extends Upload
  3. {
  4.     function __construct()
  5.     {
  6.         parent::__construct();
  7.         return 0;
  8.     }
  9.  
  10. // ...
  11. }
  12. ?>
karis
Warning: Missing argument 1 for Upload::__construct(), called in /

konstruktor w rodzicu wymaga argumentu, i dostaje w/w komunikat

czy to wina tego ze konstruktor nie zadziałał w klasie potomnej, że obiekt pxml jest równy NULL ?

jakby temu zaradzic, aby klasa potomna miała zawartość tego obiektu
Fifi209
Jeżeli parent::__construct() wymaga parametru to mu go przekaż ;p (on jest jak normalna metoda [pamiętaj])
karis
sęk w tym, że nie chcę tak robić
nexis
Cytat(karis @ 23.07.2009, 00:58:48 ) *
sęk w tym, że nie chcę tak robić

To ustaw parametr jako opcjonalny:
  1. <?php
  2. function __construct($sciezka = null) {}
  3. ?>
karis
ale nadal nie zwraca mi obiektu pxml
Fifi209
Cytat(karis @ 23.07.2009, 00:12:05 ) *
ale nadal nie zwraca mi obiektu pxml


Jak dla mnie po wywołaniu konstruktora bez parametru powinno stać się to:
  1. <?php
  2. if(!is_dir($this->sciezka))
  3.         {
  4.             echo  'Nie ma takiego katalogu';
  5.             exit;
  6. ?>


i kod dalej się nie wykona... ale to tylko takie moje małe przemyślenia.

Więc zrób tak:

(w rodzicu)

  1. <?php
  2. function __construct($sciezka=null)
  3.     {
  4. if (!empty($sciezka)) {
  5.         //przygotowanie
  6.         $this->sciezka = $sciezka;
  7.        
  8.         if(!is_dir($this->sciezka))
  9.         {
  10.             echo  'Nie ma takiego katalogu';
  11.             exit;
  12.         }
  13.         elseif(!is_writeable($this->sciezka))
  14.         {
  15.             echo 'Wskazana lokalizacja posiada zle chmody';
  16.             exit;
  17.         }
  18.         else
  19.         {
  20.             return true;
  21.         }
  22.     }
  23. }
  24. ?>


Mniej więcej oczywiście coś takiego.
karis
zrobiłem tak, ale dostaje taki komunikat

Fatal error: Access to undeclared static property: Upload::$pxml in

jak próbuje sie odwolac do obiektu pxml
Fifi209
Jak błąd wskazuje nie jest to zmienna statyczna. Tak więc $this->pxml
karis
jeśłi tak wyświetlam tzn przepuszczam przez var_dump, to dostaje NULL, zatem jest pusty, a nie powinien? dlaczego jest pusty? moze w rodzicu coś źle przypisałem?
Fifi209
Cytat(karis @ 23.07.2009, 00:53:30 ) *
jeśłi tak wyświetlam tzn przepuszczam przez var_dump, to dostaje NULL, zatem jest pusty, a nie powinien? dlaczego jest pusty? moze w rodzicu coś źle przypisałem?


Skoro nie jest jej przypisana żadna domyśla, wartość a u rodzica wywołujesz tylko konstruktor to trudno się dziwić że jest pusta. winksmiley.jpg
karis
nie.

tak to gryzę:

  1. <?php
  2. if(!empty($_FILES))
  3. {
  4.  
  5.         $upload = new Upload('upload/');
  6.         $upload->dozwolonePliki=array('jpg', 'zip', 'png');
  7.         $upload->tablicaFILES=$_FILES['plik'];
  8.         if($upload->wgraj())
  9.         {
  10.             echo 'Plik przeslany<br /><br />';
  11.            
  12.             $zip = new Paker2();
  13.             $zip->otworz("upload/".$_FILES['plik']['name']);
  14.             if($zip->wypakujDo('tmp/'))
  15.             {
  16.                
  17.                 echo 'Plik wypakowany';
  18.                 echo '<br /><br />
  19.                 <b>Informacje o wgranym szablonie</b>
  20.                 <br /><br />
  21.                
  22.                 ';
  23.                
  24.                     $xml = new XML();
  25.                     $xml->debug();
  26.            
  27.  
  28.             }
  29.             $zip->zamknij();
  30.            
  31.            
  32.         }
  33.         else
  34.         {
  35.             echo 'Problem: <br />';
  36.             echo '<pre>'.print_r($_FILES).'</pre>';
  37.  
  38.         }
  39.  
  40. }
  41. ?>
Fifi209
Tworzysz dwa inne obiekty, inny dla klasy upload gdzie są dane i inny dla xml. Utwórz tylko xml i wykonuj te działania co na upload.
karis
no dzięki stary, szacuneczek biggrin.gif:D:D:D

teraz wszystko śmiga
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.