Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP5 - OOP - Overloading - __set __get ???

[es] :: PHP :: PHP5 - OOP - Overloading - __set __get ???

[ Pregleda: 2598 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sale83
Australia
Sydney

Član broj: 41625
Poruke: 729
*.ispone.net.au.



+30 Profil

icon PHP5 - OOP - Overloading - __set __get ???19.07.2006. u 05:10 - pre 216 meseci
Pokusavam da shvatim overloading upotrebom __get __set
sa ovoga linka:
http://au.php.net/manual/en/language.oop5.overloading.php

Prosto ne mogu da shvatim sta se tamo desva. iako volim __set i __get ( Navikao u .NET-u)

Isto ova linija umesto da vrati true uvek mi vraca false ???

var_dump(isset($foo->a)); //true

Dok overloading sa __call sam shvatio tj znam kako da iskoristim izvan classe
Ali kako da preklopim metode unutar classe ???


Recimo :
Code:

<?

// mozda sad ovo nije nesto a nije toliko bitno
// bitno mi je kako da preklopim metode unutar classe 
class Osoba {

private $_name;


    //Konstruktor
public function Osoba($name)
{
$this->_name =  $name;
}
 
// Ovaj sam nacin uvek koristio            
private function GetName()
{
 return $this->_name;
}
   
//Ovde bi trebalo da ide nesto tipa SetName() ali nikad nisam koristio
//private function SetName($name)
//{
// samo onda bi se metoda GetName morala menjati
// $this->_name = $name;
//}


public function Ime(){
echo "Vase ime je ".$this->GetName()."<br>";
}     

// kako ovde preklopiti sa ime($ime)  
// znaci da bude isto ime metode samo razliciti argumenti

// da ne bude ovako ime2 nego ime...
public function Ime2($ime){
$this->_name =  $ime;
echo "Vase novo ime je ".$this->GetName()."<br>";
}    
            

}

$foo = new Osoba("Petar");
$foo->Ime();
$foo->Ime2("Jovan");

// rezultat je:
//Vase ime je Petar
//Vase novo ime je Jovan





class OsobaVirtual
{
  private $x = array();

    function __call($m, $a)
   {
       print "Virtualna metoda $m je pozvana sa broje argumenata = ".count($a)."<br>";
       $this->_x = $a;
      return $this->_x;
   }
}

$foo = new OsobaVirtual();
echo"<pre>";
$a = $foo->test("Petar");
print_r($a);
$b = $foo->test("Petar","Petrovic");
print_r($b);
/* Rezultat je:
Virtualna metoda test je pozvana sa broje argumenata = 1
Array
(
    [0] => Petar
)
Virtualna metoda test je pozvana sa broje argumenata = 2
Array
(
    [0] => Petar
    [1] => Petrovic
)
*/



?>



Da li je neko radio sa _set i _get i overload ??

http://au.php.net/manual/en/language.oop5.overloading.php


I jel moze neko da proveri da li vama ova linja vraca false ili true ??

var_dump(isset($foo->a)); //true

[Ovu poruku je menjao sale83 dana 19.07.2006. u 08:35 GMT+1]
Sto mozes danas ne ostavljaj za sutra!
 
Odgovor na temu

Br@nkoR
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: PHP5 - OOP - Overloading - __set __get ???20.07.2006. u 09:11 - pre 216 meseci
1. Koliko mi je poznato PHP ne podržava da u okviru iste klase imaš dve metode istog imena, nešto što mi pada na pamet:
Code:

public function Ime($ime = null){
 if(isset($ime)) {
  $this->_name = $ime;
  echo 'Vase novo ime je '.$this->GetName().'<br />';
 } else {
   echo 'Vase ime je '.$this->GetName().'<br />';
 }
}

ili nešto pomoću func_num_args(),func_get_args() ili func_get_arg()
Code:

public function Ime(){
 $num = func_num_args();
 if($num > 0) {
  $this->_name = func_get_arg(0);
  echo 'Vase novo ime je '.$this->GetName().'<br />';
 } else {
   echo 'Vase ime je '.$this->GetName().'<br />';
 }
}




2.
Code:
var_dump(isset($foo->a)); //true

Ovo vraća false zato što nigde nemaš definisanu variablu "a" za datu klasu, imaš definisanu kao argument za metod __call, ali je ona vidljiva samo za taj metod.
Da bi ti vratio true, unutar metode __call stavi npr:
Code:

$this->a = $a;

ili definiši (dodeli) klasi negde taj atribut.
Banned - Not available
 
Odgovor na temu

sale83
Australia
Sydney

Član broj: 41625
Poruke: 729
*.ispone.net.au.



+30 Profil

icon Re: PHP5 - OOP - Overloading - __set __get ???20.07.2006. u 10:19 - pre 216 meseci
BRANKO Za ovo A i TRUE-FALSE pogledaj ovaj link i primer

http://au.php.net/manual/en/language.oop5.overloading.php

A nije iz metode __call hehe :)
To a u metodi _call() predstavlja atribut :)

Ja govorim za a iz ovog ovde primera
http://au.php.net/manual/en/language.oop5.overloading.php

Pazi ni na sajtu nije A definisano u okviru klase pa je njima vratilo TRUE !!!

A moje rezultat je:

Code:

Setting [a] to 100
OK!
Getting [a]
Returning: 100
Setting [a] to 101 
OK!
Getting [z]
Nothing!
Setting [z] to 1
Not OK!

Checking if a is set
[b]bool(false)[/b]
Unsetting a 
Checking if a is set
[b]bool(false)[/b]
Checking if N is set
[b]bool(true)[/b]
var_dump(foo):object(Setter)#1 (2) {
  ["n"]=>
  int(1)
  ["x:private"]=>
  array(3) {
    ["a"]=>
    int(101)
    ["b"]=>
    int(2)
    ["c"]=>
    int(3)
  }
}




Mada znam ako definisem a u clasi da ce da vrati TRUE..

Pa me je to zbunilo da li je na sajtu greska ili nesto drugo nije kako treba...



Inace sto se tice preklapanja metoda u okviru klase izgleda da PHP5 ne podrzava..( Glupo ali sra da radim)


A ono __set __get U PHP5 mi nije nesto priraslo srcu...
Ili je to suvise Glupo ili u suprotnom ODLICNO a ja ne shvatam kako funkcionise to. Nazalost zbog toga
izgleda da cu i dalje da koristim klasicni pristup GetValue SetValue....


Poz
sale



Sto mozes danas ne ostavljaj za sutra!
 
Odgovor na temu

Br@nkoR
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: PHP5 - OOP - Overloading - __set __get ???20.07.2006. u 10:49 - pre 216 meseci
Citat:
sale83: BRANKO Za ovo A i TRUE-FALSE pogledaj ovaj link i primer

http://au.php.net/manual/en/language.oop5.overloading.php

A nije iz metode __call hehe :)
To a u metodi _call() predstavlja atribut :)

Ja govorim za a iz ovog ovde primera
http://au.php.net/manual/en/language.oop5.overloading.php

Pazi ni na sajtu nije A definisano u okviru klase pa je njima vratilo TRUE !!!


:) ok, hvala
izvinjavam se pogrešno sam razumeo problem.
Kod mene vraća true.

A nije definisan ali je dodeljen toj klasi u tom primeru:
Code:

$foo->a = 100;



Code:

Setting [a] to 100
OK!
Getting [a]
Returning: 100
Setting [a] to 101
OK!
Getting [z]
Nothing!
Setting [z] to 1
Not OK!
Checking if a is set
bool(true)
Unsetting a
Checking if a is set
bool(false)
bool(true)
object(Setter)#1 (2) {
  ["n"]=>
  int(1)
  ["x:private"]=>
  array(2) {
    ["b"]=>
    int(2)
    ["c"]=>
    int(3)
  }
}

Banned - Not available
 
Odgovor na temu

sale83
Australia
Sydney

Član broj: 41625
Poruke: 729
*.ispone.net.au.



+30 Profil

icon Re: PHP5 - OOP - Overloading - __set __get ???20.07.2006. u 10:59 - pre 216 meseci
Pazi kad samo kopiram kod i pokrenem

I uvek vraca FALSE iako je A dodeljen Klasi

Trenutno na Win imam PHP Version 5.0.4 Na Linux jos nisam probao :)

Naravno ja uklonim private posto dobijam FATAL ERROR :)



Poz
sale
Sto mozes danas ne ostavljaj za sutra!
 
Odgovor na temu

Br@nkoR
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: PHP5 - OOP - Overloading - __set __get ???20.07.2006. u 11:15 - pre 216 meseci
ko mene je PHP 5.1.2
Banned - Not available
 
Odgovor na temu

sale83
Australia
Sydney

Član broj: 41625
Poruke: 729
*.ispone.net.au.



+30 Profil

icon Re: PHP5 - OOP - Overloading - __set __get ???20.07.2006. u 12:29 - pre 216 meseci
Evo napokon i kod mene sada vraca TRUE :)

skino sam PHP 5.1.4 i instalirao :)

Trenutno sam testirao na IIS sad samo jos Apache da podesim da radi sa novim :)


Znaci ipak je bio problem do PHP-a :)


Poz
sale
Sto mozes danas ne ostavljaj za sutra!
 
Odgovor na temu

[es] :: PHP :: PHP5 - OOP - Overloading - __set __get ???

[ Pregleda: 2598 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.