Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasy
Forum PHP.pl > Forum > PHP
qbba
Witam. Jestem prawie nowy wiec prosze o wyrozumialosc biggrin.gif

Moje pytanie jest czysto teoretyczne.
Otoz czy warto uzywac klas. Czy nie wystarczylyby funkcje oraz co jest szybsze.
kurtz
Cytat
Moje pytanie jest czysto teoretyczne.  
Otoz czy warto uzywac klas. Czy nie wystarczylyby funkcje oraz co jest szybsze.
hmm watek chyba bardziej kwalifikowlaby sie na php pro ale to zoabczymy :)

o obiektach: sa wolniejsze od funkcji zdefiniowacyh statycznie jednak pozwalaja w latwy sposob grupowac fukcje ktore od siebie zaelza. masz tez wieksza swobode manewrowania - nie musisz w kazdym miejscu sprawdac czy zaladowano wszystkie pdorzedne funkcje z ktorych korzystasz.

przy duzych projektach spokojnie zaczynam projekt od szkieltu klasy, przy mniejszych spokojnie wystarczaja funkcje ;)
Seth
Musze jeszcze dodac z przykroscia, ze klasy w php to tylko ulamek mozliwosci techniki obiektowej dostepnej chociazby w Javie.

Obiekty napewno moga ulatwic Ci zycie przy duzych projektach ale tak jak napisal kurtz przy mniejszych sa wzasadzie tylko sztuka dla sztuki.
qbba
hmmm ma to byc wiekszy projekt, wiekszy od moich dotychczaasowych.
Glownym problemem jest niestety szybkosc.
Z tego co zauwazylem np. phpnuke nie opiera sie wcale na klasach (przynajmniej tak wynika z mojej analizy).

Jeszcze jedno pytanie czy stosowac klasy do "wszytkiego"?? Chodzi mi o to czy klasy stosowac wszedzie nawet jesli jakas czesc wystepuje tylko jeden raz.
kurtz
Cytat
Glownym problemem jest niestety szybkosc.
hmm straty wynikajace z uzycia obiektow czesto sa sladowe (tzn w ms). duzo zalezy od tego co tak na prawde bedziesz robil i czy bedziesz potrzebowal wykonywac zabierajace czas operacje - wtedy warto zaczac myslec rowniez o cachowaniu :)
Cytat
Z tego co zauwazylem np. phpnuke nie opiera sie wcale na klasach (przynajmniej tak wynika z mojej analizy).
z calym szacunkiem ale phpnuke jest kiepskim wyznacznikiem "jak pisac duze projekty" dla mnie. jest wrecz antywzorem w niektorzych dziedzinach wg mnie.
Cytat
Jeszcze jedno pytanie czy stosowac klasy do "wszytkiego"?? Chodzi mi o to czy klasy stosowac wszedzie nawet jesli jakas czesc wystepuje tylko jeden raz.
zdecydowanie nie do wszystkiego. jesli jakis fragment wystepuje raz to byc moze nawet ani obiektu, ani funkcji nie bedziesz potrzebowal ;)
qbba
hmm zostalem przekonany do klas biggrin.gif tylko nasuwaja sie kolejne pytania:
Od czego zaczac questionmark.gif Na jakiej podstawie wrzucac funkcje do jednej klasy?

PS. Wiem ze truje, no ale od tego jest chyba to forum laugh.gif laugh.gif
kurtz
Cytat
Od czego zaczac ??
od poczatku :)
http://php.polbiznes.pl/manual/pl/language.oop.php
najlepiej jak sam przygotujesz jakas (nawet prosta klase) i uzyjesz jej kilka razy. dobrze by tez bylo gdybys obyl sie troszke z uzywaniem i tworzeniem obiektow zanim zaczniej z nich korzystac z produkcji - nawet lepiej zebys na razie pozostal przy pisaniu strukturalnym (bo pewnie znasz je lepiej). w ten sposob nie bedziesz musial "na chybcika" douczac sie/ bladzic gdy pojawi sie jakis problem.
Cytat
Na jakiej podstawie wrzucac funkcje do jednej klasy?
na podstawie wlasnego widzimisie. jesli uzywasz danego bloku wiecej niz jeden raz (tzn w wiecej niz jednej metodzie/funkcji) mozesz go raczej wrzucic do nowej funkcji (byle nie przesadzic ;)
zalew
hmm... klasy sa duzo lepsze przy projektach zakladajacych ich ciagly rozwoj .. bo np tworzysz klase ktora dziedziczy wlasnosci od innej i roszerzasz ja o wlasne.. to potem jak porzebujesz zaimplementowac jakas dodatkowa funkcje np sprawdzajaca bledy lub rozszerzajaca mozliwosci to po prostu dopisujesz co trzeba.. a w przypadku gdy powielasz te same funkcje juz to wymaga od ciebie implementacji modulu w kazda z nich.. przewaga klas jest tu znaczaca wg mnie...
qbba
Dzieki za wszystko smile.gif !!!!
Klasy mam jak narazie opanowane na "sucho".
Sprobuje to cos co mam napisac napisac za pomoca klas.

PS. Jeszcze tu wroce biggrin.gif biggrin.gif
dragossani
Proponuje zacząć od zbudowania sobie klasy nadrzędnej z której dziedziczą wszystkie pozostałe. Jeśli ktoś programował np. w Delphi to powinien kojarzyć coś takiego jak klasa TObject - chodzi o tę samą zasadę. Artykuł na ten temat: Abstract Classes.
qbba
hmm... i powracam smile.gif) tym razem z konkretnym problemem:

Wyskakuje mi taki oto blad :
Kod
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /home/qba/public_html/class.php on line 10

Wiem ze to blad parsacji ale nie widze w tym kodzie nic blednego
Kod
8 linia: class db

9:        {

10:           var $connect_id;

11:           var $dbname;

12:           var $result;

Z gory dzieki za pomoc
zalew
cwiczenia czynia mistrza, sam dojdziesz co zchrzaniles. rozdzial klasy w manualu dosc dobrze opisuje co jak nalezy definiowac i jak sie do tego odnosic.. pobaw sie z tym jakis czas, kazdy musi przez to przejsc smile.gif
qbba
No nie kurde poprawianie 150 linijek kodu smile.gif (i tak fart ze tylko tyle:) a i dlaczego tak sie dzieje questionmark.gif
kurtz
Cytat
No nie kurde poprawianie 150 linijek kodu :) (i tak fart ze tylko tyle:) a i dlaczego tak sie dzieje ??
masz blad skladni nieco wyzej.
rzseattle
laugh.gif

Przypomnialy mi sie normalnie stare dobre czasy kiedy pisalem

Kod
if ($i=1) {}


I zachodzilem w glowe czemu $i jest caly czas takie same. Normalnie az sie lezka w oku kreci.



A tak na marginesie to blad nie zawsze jest tam gdzie wzkazuje php.
{ } i ( ) to dwie rozne sprawy.
Seth
Pozwole sobie dac tu maly przykladzik prostej klasy do wysylania smsow na bramke plusa (bez implementacji proxy - ominiecia banu IP):
plus.class.php
Kod
<?php

// sms_plus class v1.0.3

// Copyright(C)2002 by Seth



class sms_plus{

  var $from = '';

  var $to   = '';

  var $msg  = '';

  var $inner_vars = array();



  function sms_plus( $from="", $to=0, $msg="" ){

    $this->from = $from;

    $this->to   = $to;

    $this->msg  = $msg;

    $this->inner_vars = array();



    $this->inner_vars['host']   = 'www.text.plusgsm.pl';

  }

  

  // Zwraca:

  // 1  - dla wyslanej wiadomosci

  // 2  - dla przekrczenia limitu bramki

  // -1 - dla innych rezultatow

  function get_info( &$text ){

    if( strpos($text, 'została wysłana') != 0 ) return 1;

    if( strpos($text, 'przekroczenia limitów bramki') != 0 ) return 2;



    return -1;

  }

  

  

  // Wysyla wiaodmosc

  function send(){

    $data = 'tprefix='.substr( $this->to, 0, 3 ).'&numer='.substr( $this->to, 3 ).'&odkogo='.$this->from.'&dzien='.date('Y-m-d').'&godz='.date('H').'&min='.date('i').'&tekst='.$this->msg;

    $fp = fsockopen( $this->inner_vars['host'], 80 );

    

    fputs( $fp, "POST /sms/sendsms.php HTTP/1.1rn" );

    fputs( $fp, "Host: ".$this->inner_vars["host"]."rn" );

    fputs( $fp, 'Referer: http://'.$this->inner_vars['host']."rn" );

    fputs( $fp, 'Content-length: '.strlen($data)."rn" );

    fputs( $fp, "Content-type: application/x-www-form-urlencodedrn");

    fputs( $fp, "Connection: closernrn" );

    fputs( $fp, $data );



    $buf = "";

    

    while ( !feof( $fp ) )

      $buf .= fgets( $fp, 128 );



    fclose($fp);



    return $this->get_info( $buf );

  }

}

?>


Tutaj natomiast jet kod, ktory korzysta z owej klasy:
Kod
<?php

$prefix['plus'] = array( 601, 603, 605, 607, 609, 691, 693, 695 );



if( in_array( substr($_POST[to],3), $prefix['plus'] ) ){



require_once( 'plus.class.php' );



$sms = new sms_plus();



$sms->to   = $_POST["to"]; // nr kom osoby do ktorej wysylamy przek. z form.

$sms->msg  = $_POST["msg"];// wiadomosc przekazana ze strony z formularzem

$sms->from = $_POST["from"]; // podpis od kogo jest wiadomosc



switch( $sms->send() ){

case 1:

  echo 'Wyslano smsa';

  break;

case 2:

  echo 'Przekroczono limit wysylnia';

  break;

default:

  echo 'blad bramki sms';

  break;

}

}else{

echo 'zly prefix';

}
qbba
heh.... nie wywalalo mi sie z powodu skladni (przynajmniej teraz kod dziala a nic w nim nie zmienialem) wywalalo mi sie z powodu blednego zapisu pliku dokonanego prze "swietny polski edytor plikow html <<pajaczek>>" :?
wywalalo sie w miejscach gdzie byly wcicia w kodzie (a wiec caly kod) po zrobieniu od nowa wciec dziala 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.