Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Questions about OOP..
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
pepys



Data înscrierii: 05/Mai/2005
Mesaje: 48

Trimis: Joi Ian 10, 2008 1:31 pm    Titlul subiectului: Questions about OOP..  

Buna..

sunt mai incepator in PHP OOP, asa ca v-as ruga sa ma ajutati sa-mi lamuresc niste neclaritati. Incep cu prima si mai adaug apoi.. thanks celor care-si fac timp sa raspunda..

Cod:
function connect($host,$username,$password,$name) {
   $connectect = mysql_connect($host, $username, $password) or die(mysql_error());
   $selected = mysql_select_db($name) or die(mysql_error());
}


function setData($table) {
   $this->table = $table;
   }



De ce la prima functie foloseste variabilele din parametrii functiei asa cum sunt, iar la a doua face "conversia" $this->table = $table? E pentru ca la inceputul clasei am declarat un

Cod:

var $table;



? Thanks..
Sus  
pepys



Data înscrierii: 05/Mai/2005
Mesaje: 48

Trimis: Joi Ian 10, 2008 1:42 pm    Titlul subiectului:  

In cadrul unei functii, intr-o clasa, am declarat un

Cod:
global $array;


unde array-ul respectiv e construit intr-un fisier de parametri. Cum pot sa fac sa-l declar in cadrul clasei, la inceput, si sa nu mai trebuiasca sa-l declar asa la inceputul fiecarei functii?
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1395
Locație: Sibiu

Trimis: Joi Ian 10, 2008 1:52 pm    Titlul subiectului:  

Ai grija cum te exprimi. Una e 'sunt incepator in PHP OOP' si alta e 'habar n-am ce e si cu ce se mananca OOP'. Tu, din ce vad eu, te incadrezi mai degraba la a doua varianta.

Explicatia e urmatoarea: in prima functie care ai dat-o ca exemplu, se apeleaza numai niste functii interne ale php-ului, mai exact conectarea la baza de date (mysql_connect) si selectia bazei de date (mysql_select_db). Astea n-au nici o legatura cu OOP, si nici functia in sine nu are. E programare procedurala.

Referitor la a doua, faptul ca tu la inceputul clasei ai declaratia Cod: var $table inseamna ca obiectele care instantiaza clasa ta vor contine o variabila membru cu numele $table. Referirea la membrul acesta se face cu $obiect->table (unde $obiect e o instanta), sau din interiorul clasei cu $this->table.

Partea cu global e simpla: citeste documentatia cuvantului cheie global pe www.php.net si vei intelege de ce e nevoie de el. Iar raspunsul la intrebarea ta e negativ. Daca vrei sa il apelezi din scopul global in functiile tale, va trebui sa il declari global in fiecare.

Deci concluzia e: invata php, lucreaza cu el pana te prinzi, intre timp citeste despre POO (sau OOP, tot aia e), notiuni teoretice that is, si dupa aia poti sa te apuci de POO in php. Spor la invatat.
Sus  
Praetor



Data înscrierii: 10/Ian/2008
Mesaje: 10

Trimis: Joi Ian 10, 2008 6:53 pm    Titlul subiectului:  

Si daca vrei sa accesezi db-ul OOP style, foloseste cu incredere PDO (linkul il afli singur, e pe siteul php, ca pe mine nu ma lasa forumul sa pun linkuri inca).
Sus  
Amenthes



Data înscrierii: 12/Dec/2005
Mesaje: 354

Trimis: Lun Ian 14, 2008 1:33 am    Titlul subiectului:  

Desi nu prea imi place ideea de globale si OOP laolalta... importi array-ul ala global in constructor-ul clasei si apoi il asignezi unei variabile interne a clasei, care ar trebui sa fie protected sau private.

Cod:
class A {

    protected $_array;

    public function __construct() {
        global $array;
        $this->_array = $array;
    }

}


Si pentru ca ti-am zis ca nu prea imi place solutia asta, ai putea sa pasezi acel array ca si parametru al constructorului

Cod:
class A {

    protected $_configArray;

    public function __construct($configArray) {
        $this->_configArray = $configArray;
    }

}


Mai sunt si alte solutii dar ajunge atat deocamdata.
Sus  
Texx #insane



Data înscrierii: 10/Iul/2006
Mesaje: 14
Locație: Bucharest

Trimis: Mie Ian 16, 2008 4:01 pm    Titlul subiectului:  

eu iti recomand sa nu incluzi conectarea la DB in clasa, de preferat ar fi sa faci un fisier in care sa faci conectarea si apoi sa incluzi in el fisierul cu clasa.

Nu este necesar constructorul pt ca este creat automat.

Ex:

Cod:
config.php
<?php

$host = 'localhost';
$user = 'root';
$password = '';
$baza_de_date = 'texx';
$db = new mysqli( $host, $user, $pass, $baza_de_date );

include('clasa_mea.php');
$table = 'tabela_cu_date';
$a = new clasa_test();
$a->table = $table;

$afisam_rezultate = $a->scot_date();

// sa afiseze array-ul frumos :)

echo "<pre>" . print_r($afisam_rezultate, 1) . "</pre>";

?>

clasa_mea.php

<?php
class clasa_test
{
   public $table; // tabela

   function scot_date()
   {
         global $db;
         
      $sql = "SELECT * from " . $this->table ;
         $rez = $db->query( $sql );
         $nr_rezultate = $rez->num_rows;
         $array = array();
         for (  $i=0; $i<$nr_rezultate; $i++ )
         {
            $rezultate = $rez->fetch_assoc( );
            $array[$i] = array( $rezultate['camp1'], $rezultate['camp2'], $rezultate['camp3'] );
         }
      return $array;
   }
   
}

?>


//REMOVED
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1395
Locație: Sibiu

Trimis: Mie Ian 16, 2008 4:09 pm    Titlul subiectului:  

Asta e POO? Ma faci sa rad... sau sa plang?

Ce ai facut tu aici e sa iei niste functii care se puteau face foarte frumos prin programare procedurala si sa le trantesti intr-o clasa. Si zbang! avem POO!

Bagati-va odata pentru totdeauna in cap: nu mai programati obiectual numai pentru ca e la moda. A face ceva obiectual atunci cand nu e nevoie rezulta in cod dezordonat, incalcit si greoi la rulare. POO inseamna incapsulare + mostenire + polimorfism. Tu abia de ai ceva incapsulare in codul ala al tau. Deci in cel mai bun caz, aia e 1/3 POO.
Sus  
Texx #insane



Data înscrierii: 10/Iul/2006
Mesaje: 14
Locație: Bucharest

Trimis: Mie Ian 16, 2008 4:40 pm    Titlul subiectului:  

Nu vreau sa te contrazic ( si sincer nu prea am de ce ) dar am vrut doar sa-i dau un model pe care sa-l inteleaga si sa aiba un punct de plecare, nu vreau sa dau lectii nimanui, daca ii scriam o clasa abstracta extensibila pt conectare din postgres , mysql etc. nu cred ca-l ajutam prea mult ca incepator ...
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 535
Locație: Drobeta Turnu Severin

Trimis: Joi Ian 17, 2008 12:22 am    Titlul subiectului:  

@Texx #insane poate ma insel da' nici cu codul ala nu-l ajuti, sa spuna el !
Mihaitha desi a fost cam taios cred ca ia dat sfatul care ajuta.
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1395
Locație: Sibiu

Trimis: Joi Ian 17, 2008 9:30 am    Titlul subiectului:  

Texx #insane a scris: daca ii scriam o clasa abstracta extensibila pt conectare din postgres , mysql etc. nu cred ca-l ajutam prea mult ca incepator ba din contra. Ti-ai infranat exact impulsul care trebuia sa il dezlantui (mama ce poetic sunt de la o vreme :D). Daca tot vrei sa ii explic despre, si el vrea sa afle despre POO, apai ii dai o clasa abstracta (btw clasa abstracta extensibila e pleonasm, clasele abstracte nu se pot instantia), ca aia este POO. Un profan, din codul care l-ai dat tu, ar intelege ca POO inseamna 'nu mai fac functie, fac o metoda intr-o clasa si tot aia e'. Repet, faptul ca ai creat o clasa si ai instantiat-o nu inseamna ca ai facut POO.
Sus  
Texx #insane



Data înscrierii: 10/Iul/2006
Mesaje: 14
Locație: Bucharest

Trimis: Joi Ian 17, 2008 9:47 am    Titlul subiectului:  

din punctul meu de vedere asa am crezut ca e mai simplu de inteles lucrul cu o clasa. Dupa cum am spus nu vreau sa fac impresie pe forum, vreau doar sa ajut la dezvoltarea comunitatii php din RO care si asa este destul de slaba ( ma refer la schimbul de informatii, grupuri de discutii etc. ). Sper ca in general discutiile sa fie constructive nu doar contradictorii
Bafta ;)
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community