Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Metody obiektów i includowanie plików
deejay4net
post 15.11.2008, 13:04:20
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


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
Go to the top of the page
+Quote Post
DonJeday
post 15.11.2008, 13:46:55
Post #2





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Pokaż klasę


--------------------
Go to the top of the page
+Quote Post
bim2
post 15.11.2008, 13:48:49
Post #3





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


@up
A co to ci da? smile.gif jak umiesz wytłumaczyć, to tłumacz teraz.


--------------------
Go to the top of the page
+Quote Post
deejay4net
post 15.11.2008, 14:27:50
Post #4





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


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

Ten post edytował deejay4net 15.11.2008, 14:28:15
Go to the top of the page
+Quote Post
vokiel
post 15.11.2008, 14:28:31
Post #5





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Ustaw zmienna nick w klasie user jest typu public to powinno zadziałać.

Ten post edytował vokiel 15.11.2008, 14:29:14


--------------------
Go to the top of the page
+Quote Post
deejay4net
post 15.11.2008, 14:34:08
Post #6





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


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
Go to the top of the page
+Quote Post
Noddi
post 15.11.2008, 15:22:59
Post #7





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

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


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.

Ten post edytował Noddi 15.11.2008, 15:23:45


--------------------
"Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com
Go to the top of the page
+Quote Post
deejay4net
post 15.11.2008, 15:41:35
Post #8





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


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..
Go to the top of the page
+Quote Post
bim2
post 15.11.2008, 15:43:56
Post #9





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


jaką masz wersję php? I daj wyświetlanie wszystkich błędów, zobaczymy co php powie. smile.gif


--------------------
Go to the top of the page
+Quote Post
Noddi
post 15.11.2008, 15:46:08
Post #10





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

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


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.

Ten post edytował Noddi 15.11.2008, 15:47:27


--------------------
"Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com
Go to the top of the page
+Quote Post
deejay4net
post 15.11.2008, 16:05:46
Post #11





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


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
Go to the top of the page
+Quote Post
bim2
post 15.11.2008, 16:19:00
Post #12





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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


--------------------
Go to the top of the page
+Quote Post
Noddi
post 15.11.2008, 16:28:09
Post #13





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

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


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".


--------------------
"Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com
Go to the top of the page
+Quote Post
deejay4net
post 15.11.2008, 17:05:14
Post #14





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


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
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: 14.08.2025 - 12:43