Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Metody obiektów i includowanie plików
Forum PHP.pl > Forum > PHP
deejay4net
Więc tak, mam takie nurtujące mnie pytanko.. Nie jestem może aż tak bardzo zaawansowany w php ale znam je dosyć dobrze i od jakiegoś czasu korzystam z klas. Teraz przykładowy kod:

  1. <?php
  2.  
  3. require 'class/user.php';
  4.  
  5. $usr = new user;
  6.  
  7. include'inc/jakisplik.php';
  8.  
  9.  
  10. ?>


I teraz zawartość jakisplik.php

  1. <?php
  2. print $usr->nick;
  3. ?>

Oczywiście przyjmujemy że $usr->nick od razu po zainicjowaniu ma przypisaną wartość..
Teraz właśnie nie wiem do końca (Nie znam sie aż tak na obiektach) ale moim zdaniem w pliku dołączonym przez include
  1. <?php
  2. print $usr->nick;
  3. ?>

powinno wyświetlić mi nick (a tak się nie dzieje)..
gdyż wcześniej zainicjowałem ten obiekt.. Natomiast działa to dopiero gdy zainicjuje nowy obiekt w includowanym pliku..
Gdy tworzenie nowego obiektu nie wiąże się z wykonaniem operacji to ok.. Ale gdy np przy tym jest już wykonywana operacja na bazie pojawia się problem..
Czy ktoś mógł by mi to wytłumaczyć w prosty sposób?
Zadowolę się nawet teorią bez przykładów, chociaż przykład mile widziany biggrin.gif

z góry thx i pozdro
DonJeday
Pokaż klasę
bim2
@up
A co to ci da? smile.gif jak umiesz wytłumaczyć, to tłumacz teraz.
deejay4net
No własnie.. Klasa tutaj nie ma znaczenia raczej.. Chodzi o działanie....
Dodam że klasa oczywiście działa.. bo gdy robie to bezpośrednio bez includowania to wyświetla mi nick.

może jak CI to ma coś pomóc to przyjmijmy że klasa wygląda tak

  1. <?php
  2.  
  3. class user{
  4.  
  5. public function __construct(){
  6.  
  7.  $this->nick = 'deejay4net';
  8.  
  9. }
  10.  
  11. }
  12.  
  13. ?>


Może być? tongue.gif
vokiel
Ustaw zmienna nick w klasie user jest typu public to powinno zadziałać.
deejay4net
No jest to w stylu

  1. <?php
  2.  
  3. class user{
  4.  
  5. FUNCTION __construct(){
  6.  
  7. IF($_SESSION['online']){
  8.  
  9. $this->nick = $_SESSION['nick'];
  10. $this->id = $_SESSION['id'];
  11.  
  12. }
  13.  
  14.  
  15. }
  16.  
  17. ?>



}

?>

bez public ale z tego co wiem domyślnie jest typ public
Noddi
Czyli masz mniej więcej coś takiego:

test.php:
  1. <?php
  2.  
  3. require 'class.php';
  4.  
  5. $user = new User;
  6.  
  7. include 'include.php';
  8.  
  9. ?>


class.php:
  1. <?php
  2.  
  3. class User
  4. {    
  5.    public $nick;
  6.        
  7.    public function __construct()
  8.    {
  9.        $this->nick = "Test";
  10.    }
  11. }
  12.  
  13. ?>


include.php:
  1. <?php
  2.  
  3. print $user->nick;
  4.  
  5. ?>


Po wykonaniu test.php wyświetla się "Test" czyli tak jak powinno, nie ma innej możliwości.
deejay4net
no własnie nie wyswietla mi sie test dlatego napisalem posta..
Dodam że plik jest includowany przez inną klasę także public

Czyli cos w tym stylu
  1. <?php
  2. class getp{
  3.    
  4.        public function panel($panel)
  5.        {
  6.            if(file_exists("inc/panel/" . $panel . '.php')) @include "inc/panel/" . $panel. ".php";
  7.        }
  8.    
  9.    }
  10.  
  11.        $panel = new getp;
  12.        $panel->panel('jakisplik'); // ten includowany wlasnie w ktorym nie chce to dzialac
  13. ?>


Może utrudniam sobie życie ale takie użycie ułatwia mi później modyfikacje całości..
bim2
jaką masz wersję php? I daj wyświetlanie wszystkich błędów, zobaczymy co php powie. smile.gif
Noddi
No bo to nie ma prawa Ci działać.

Możesz zrobić tak:

include.php:
  1. <?php
  2.  
  3. include "test.php";
  4.  
  5. print $user->nick;
  6.  
  7. ?>


test.php:
  1. <?php
  2.  
  3. require 'class.php';
  4.  
  5. $user = new User;
  6.  
  7. ?>


Dopiero wtedy "includować" plik include.php (u Ciebie "jakisplik") w innym miejscu.
deejay4net
Cytat(bim2 @ 15.11.2008, 15:43:56 ) *
jaką masz wersję php? I daj wyświetlanie wszystkich błędów, zobaczymy co php powie. smile.gif


Bez przesady.. nie z takimi pytaniami biggrin.gif ale jak Ci to coś da
php 5.2.6 , nie wyrzuca żądnego błędu , po prostu nic nie wyświetla.. (oczywiście sprawdzałem to bez znaku @ w klasie)
Najpierw sprawdzam takie rzeczy, później google.. a dopiero na końcu fora tongue.gif
bim2
Powiem szczerze, że nie wiem. Do klasy daj require_once żeby przypadkiem nie wczytalo jej dwa razy. Ale raczej to nic nie da.

Co do wersji PHP:
Temat: ArrayAccess

Czasami zdażają się błędy biggrin.gif
Noddi
Nic nie wyświetla bo w pliku "jakisplik" tworzysz pusty obiekt z pusta zmienna "nick", musisz wcześniej utworzyć obiekt "user", który albo "zincludujesz" albo zadeklarujesz w pliku "jakisplik".
deejay4net
Ok, albo ja namieszałem albo nikt nie zrozumiał co chciałem.. tongue.gif tyle co tutaj napisane to wiem sam biggrin.gif

ale thx za dobre chęci smile.gif
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.