[OOP] Cautare in obietele deja create de acelasi tip

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori


Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Dum Apr 22, 2012 6:31 pm


Avatar utilizator
mihaitha
Senior Member
Mesaje: 2383
Membru din: Vin Mai 04, 2007 12:40 pm
Localitate: Sibiu
Contact:

Mesajde mihaitha » Dum Mai 13, 2012 12:17 pm

Daca lucrezi OOP si doresti ceva global, de regula metoda de abordare preferata e cu singletons - http://php.net/manual/en/language.oop5.patterns.php

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Dum Mai 13, 2012 1:52 pm


Avatar utilizator
Adry.ro
Average Member
Mesaje: 76
Membru din: Lun Sep 22, 2008 11:46 pm
Localitate: Bucuresti RO
Contact:

Mesajde Adry.ro » Dum Mai 13, 2012 5:19 pm

Am folosit ce a zis socu, o variabila statica array doar ca pun instanta obiectului creat (ma ajuta mai mult).
Ultima oară modificat Mie Mai 16, 2012 9:18 pm de către Adry.ro, modificat 1 dată în total.

Avatar utilizator
mihaitha
Senior Member
Mesaje: 2383
Membru din: Vin Mai 04, 2007 12:40 pm
Localitate: Sibiu
Contact:

Mesajde mihaitha » Dum Mai 13, 2012 8:32 pm

@socu - stiu foarte bine ce e un singleton, pun pariu ca tu nu stii. Daca stiai ce e iti revizuiai ultima afirmatie. Oricum exemplul ce l-ai facut tu nu are nici o legatura cu ce a cerut adry, nu e nimic in codul tau care sa previna codul din exemplul dat de el.

@adry - ceea ce faci tu acolo nu prea e kosher si nici nu stiu daca va merge, a combina self (referinta statica a clasei) si $this (instanta obiectului) sunt doua concepte care se bat cap in cap.

Iti recomand sa folosesti un singleton care contine o serie de membri de tipul object25 de-ale tale (apropo, iti recomand sa iti denumesti clasele dupa ce fac, altfel te vei uita peste 2-3 ani la codul asta si nu o sa stii ce e object25 si ce face).

[php]
<?php
class container {
private static $instance = null;
private children = array();

public static function get_instance() {
if (!isset(self::$instance)) {
$class_name = __CLASS__;
self::$instance = new $class_name;
}
return (self::$instance);
}

public add_child($id) {
while (isset($this->children[$id])) {
$id = rand(0, 999);
}
$this->children[$id] = new object25;
}
}

// apelul extern:
container::get_instance()->add(111);
container::get_instance()->add(222);
container::get_instance()->add(333);

container::get_instance()->add(111); // asta iti va intra pe random
?>
[/php]

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Lun Mai 14, 2012 9:20 am


Avatar utilizator
mihaitha
Senior Member
Mesaje: 2383
Membru din: Vin Mai 04, 2007 12:40 pm
Localitate: Sibiu
Contact:

Mesajde mihaitha » Lun Mai 14, 2012 12:49 pm


nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Mie Mai 16, 2012 7:38 pm

Uhm.. singleton-ul il folosesti cand vrei acelasi obiect, nu mai multe.
Pt ce vrea OP-ul se foloseste o proprietate statica, fiindca sunt *mai multe* obiecte diferite.

"Am folosit ce a zis socu , o variabila statica array doar ca pun instanta obiectului creat (ma ajuta mai mult). "
De ce ai pune instanta in proprietate? Asta-i socu-mihaitha combo.

Avatar utilizator
Adry.ro
Average Member
Mesaje: 76
Membru din: Lun Sep 22, 2008 11:46 pm
Localitate: Bucuresti RO
Contact:

Mesajde Adry.ro » Mie Mai 16, 2012 9:03 pm



Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 2 vizitatori