Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PHP5 obiektowy jak mam to zrobic
Forum PHP.pl > Forum > Przedszkole
kielich
Witam dopiero zaczynam php obiektowy i mam pewnie probelm chce zrobic zwykłą pętle tak dla przykładu ale nie wiem jak przeszukąłem już całe google smile.gif i czytałem z 6 h dzisiaj smile.gif i nic nie czaje co z tym $this może mi ktoś to w 4 zdaniach wytłumaczyć będe wdzięczny o to kod:

Kod
<?php
class Klasa {
    
     public $x;
    
     public function petla()
     {
    
     for ($x=1; $x<=10; $x++)
    
     return $this -> x;
    
     }
     $Klasa = new Klasa;
     $Klasa ->petla;
     echo "wynik wynosi{$Klasa->petla}";
    
?>

no taki błąd
Kod
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in
kajzur
Wydaje mi się że odwołujesz się poza klasą do zmiennej składowej private, zmień private na public może winksmiley.jpg Tak wogóle jakiś błąd dostajesz?
blooregard
$Klasa ->petla();

Nawiasy.

unexpected T_VARIABLE, expecting T_FUNCTION = niespodziewane odwołanie do zmiennej, spodziewana funkcja
kielich
poprawiłem na
Kod
$Klasa = new Klasa;
$Klasa ->petla();
echo "wynik wynosi{$Klasa->petla}";


dalej to samo
kurcze nie wiem czy to ma sens pisania obiektowo co_jest.gif
blooregard
Cytat
dalej to samo


Tak, jak mówisz:
  1. <?php
  2. echo "wynik wynosi{$Klasa->petla}";
  3. ?>

Dalej ten sam błąd, tylko w innym miejscu.

Jak wywołujesz funkcję, to dajesz NAWIASY po jej nazwie - po tym interpreter PHP odróżnia funkcję od zmiennej.
Może lepiej zacznij od podstaw, zanim się zaczniesz bawić z OOP
kielich
No co do podstaw to strukturalnie już pisze bardzo długo i chciałem spróbować obiektowo

ps. umiesz pocieszyć smile.gif

a poprawiłem bład tak jak kazałeś i dalej cos nie gra cos jest nie tak
erix
Cytat
to strukturalnie już pisze bardzo długo

Można bardzo długo wyprzedzać na podwójnej ciągłej i nie wiedzieć, że to niezgodne z przepisami. tongue.gif

Cytat
dalej cos nie gra cos jest nie tak

Żadnych błędów, nic? Co się dzieje?
piotrooo89
a tak spróbuj:

  1. <?php
  2. class Klasa
  3. {
  4.    public function petla()
  5.    {
  6.        for ($x=1; $x<=10; $x++)
  7.            echo $x;
  8.    }
  9. }
  10. $kl = new Klasa();
  11. $kl -> petla();
  12. ?>


#EDIT
zły kod.
kielich
no bład dalej tan sam smile.gif
Kod
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in ............ on line 14
blooregard
Cytat
No co do podstaw to strukturalnie już pisze bardzo długo i chciałem spróbować obiektowo

No to pamietaj, że

(strukturalnie) funkcja(); == (obiektowo) $obiekt->funkcja();

Cytat
a poprawiłem bład tak jak kazałeś i dalej cos nie gra cos jest nie tak

Ale co?
Jakis komunikat błędu ?

A, już wiem: brakuje Ci zamykającego nawiasu } po definicji klasy
kielich
No chociaż jeden ...smile.gif a nie już ze zle smile.gif ale petla sie nie wykonuje :/

wyswietla tylko wynik wynosi
piotrooo89
Cytat(kielich @ 11.04.2009, 15:09:34 ) *
ale petla sie nie wykonuje :/


to może pokaż kod bo u mnie to moje działa wyświetla ładnie.
kielich
No kod taki jak był poprzedni ale kiedy zrobie tak
Kod
<?php
class Klasa {
  
    public $x;
  
    public function petla()
    {
  
    $this ->x=2;
    return $this -> x;
  
    }
    }
    $Klasa = new Klasa;
    $Klasa ->petla();
    echo "wynik wynosi{$Klasa->petla()}";
?>

to dział normalnie
piotrooo89 to pokaz twój kod tzn mój ale twój :)
piotrooo89
zobacz pare postów wyżej...
kielich
No nie działa ja chce to wyswietlic na nowym obiektem a nie tak jak ty
K4mil94
A nie trzeba tu konstruktora zbudować ?
piotrooo89
nie wiem czy to to:

  1. <?php
  2. class Klasa
  3. {
  4.    public function petla()
  5.    {
  6.        for ($x=1; $x<=10; $x++)
  7.        {
  8.            $s .= $x;
  9.        }
  10.        return $s;
  11.    }
  12. }
  13. $kl = new Klasa();
  14.  
  15. echo "wynik wynosi {$kl -> petla()}";
  16. ?>
adrian.p
No bo do zmiennej $x nie przypisujesz nic! Zwracasz $this->x ktora nie ma wartosci...
kielich
No dokłądnie o to mi chodziło a możesz mi powiedzieć dlaczego tak $s .= $x; dlaczego z " kropką"
I jesli możesz mi wyjaśnic co z tym $this
adrian.p
Cytat
No dokłądnie o to mi chodziło a możesz mi powiedzieć dlaczego tak $s .= $x; dlaczego z " kropką"


do zmiennej $s dopisuje zmienna $x; to taki sam zapis jak $s = $s.$x;


I przy okazji, szybki powrot do pierwszego kodu:

Kod
<?php
class Klasa {
    public $x;
    
    public function petla() {
        
        for ($x=1; $x <= 10; $x++)
        return $this->x;
    }
}
    
     $Klasa = new Klasa;
          
     echo "wynik wynosi{$Klasa->petla()}";
    
?>


W iteracji zwiekszasz zmiena $x a zwracasz $this->x. To dwie rozne sprawy.
blooregard
$s .=$x to to samo co $s = $s . $x; czyli skrócna forma operatora konkatenacji (łączenia stringów)

$this to odwołanie do obiektu "wewnątrz" niego samego.
artur_dziocha
$s .= $x; dopisujesz do zmiennej $s wartości $x(nie nadpisujesz zmiennej) podstawy PHP
$this - odwołujesz sie do zmiennych klasy, do funkcji zawartych w klasie(wewnatrz klasy)
Musisz jeszcze sporo poczytac o oop
http://pl.php.net/oop
najważniejsze podstawy
kielich
OK czyli ten kod jest prawidłowy??
Kod
<?php
class Klasa
{
   public function petla()
   {
       $a=56;
       $b=48;
       $wynik=$a+$b/3;
       if ($wynik<100){
      
       echo"liczba jest mniejsza od 100 ";
       }
        return $wynik;
   }
}
$kl = new Klasa();
echo " <br />a wynik wynosi {$kl -> petla()}";
?>


A powiedz mi jeszcze kiedy i jak używać tego $this bo wszedzie jest napisane to co ty mi powiedziałeś
i już mykam smile.gif

Tu jest dobry przykład no ale go zbytnio nie rozumiem w personaliach smile.gif
Kod
<?php

    class osoba
    {
        public $imie; // 1
        public $nazwisko;
        
        public function ustawPersonalia($imie, $nazwisko) // 2
        {
            $this -> imie = $imie; // 3
            $this -> nazwisko = $nazwisko;
        } // end ustawPersonalia();
        
        public function personalia()
        {
            return $this -> imie.' '.$this -> nazwisko;        
        } // end personalia();    
    }
    
    $osoba = new osoba; // 4
    $osoba -> ustawPersonalia('Adam', 'Kowalski'); // 5
    
    echo $osoba -> personalia(); // 6
?>
erix
Cytat
A powiedz mi jeszcze kiedy i jak używać tego $this bo wszedzie jest napisane to co ty mi powiedziałeś

$this, to odniesienie do bieżącej instancji klasy.

Czyli w Twoim przykładzie, to by było coś takiego:

  1. <?php
  2. $osoba->zmienna = 'asd';
  3.  
  4. //... w klasie osoba
  5. function personalia(){
  6.   $this->zmienna = 'asd';
  7. }
  8. ?>


Klasę możesz przyporządkować do dowolnej zmiennej; $this używamy wewnątrz klas, aby odnieść się do samej siebie.
piotrooo89
a ja tu bym walnął exception

  1. <?php
  2. if ($wynik<100){
  3.      
  4.       echo"liczba jest mniejsza od 100 ";
  5.       }
  6. ?>
kielich
OK myśle że tak no ale ciągle jest mniejsza od nawet jak dam $a=200 i $b=200
Kod
<?php
class Klasa
{
   public function petla()
   {
       $a=59;
       $b=50;
       $wynik=$a+$b;
       return $wynik;
   }
}
try
    {
        if($wynik <= 100)
        {
            throw new Exception('liczba jest mniejsza od 100');
        }
        
        echo 'blbalbalb ';
    }
    catch(Exception $w)
    {
        echo $w -> getMessage();
    }

$cos = new Klasa;
echo " i wynosi: {$cos->petla()}";
?>
piotrooo89
tak ma być:

  1. <?php
  2. class Klasa
  3. {
  4.    public function petla()
  5.    {
  6.        $a=59;
  7.        $b=50;
  8.        $wynik=$a+$b;
  9.        if($wynik <= 100)
  10.        {
  11.            throw new Exception('liczba jest mniejsza od 100');
  12.        }
  13.        return $wynik;
  14.    }
  15. }
  16. try
  17. {
  18.    $cos = new Klasa;
  19.    echo " i wynosi: {$cos->petla()}";
  20. }
  21. catch(Exception $w)
  22. {
  23.    echo $w -> getMessage();
  24. }
  25. ?>
kielich
OK teraz rozumiem Wielkie thx a mam takie pytanie czy można zmienne przekazywać między funkcjami??
piotrooo89
można za pomocą $this.
kielich
Dzięki Ci za pomoc tylko ty praktycznie mi pomagasz w tym poście czy mógłbyś pokrótce przedstawić jak to ma wyglądać (krótki kod) będę wdzięczny
piotrooo89
ale co dokladnie chcesz wiedzieć? co mam pokazać?
kielich
jak zmienne przekazywać między funkcjami
piotrooo89
powiedzmy że mamy taki konstruktor:

  1. <?php
  2. public function __construct($sql)
  3.    {    
  4.        $this->sql = $sql;
  5.    }
  6.    public function load()
  7.    {
  8.        $sql_query = mysql_query($this->sql);
  9.        while ($rows = mysql_fetch_row($sql_query))
  10.        {
  11.            $rows[0];
  12.        }
  13.    }
  14. ?>


tak można przekazywać.
kielich
OK Dzięki za wszystko POZDRO dla Ciebie
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.