Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] jak napisać taką metodę
Forum PHP.pl > Forum > PHP > Object-oriented programming
nu_moon
Witam,

Może mnie ktoś naprowadzić w jaki sposób mogę napisać metodę z której będzie można korzystać w taki sposób:

  1. $obiekt->metoda('zmienna') = 'string lub zmienna';
Fifi209
Wątpię aby się dało coś takiego zrobić...
A skąd taki pomysł? Do czego Ci to potrzebne?
flashdev
Cytat(nu_moon @ 26.08.2009, 23:26:08 ) *
Witam,

Może mnie ktoś naprowadzić w jaki sposób mogę napisać metodę z której będzie można korzystać w taki sposób:

  1. $obiekt->metoda('zmienna') = 'string lub zmienna';


Witam,

jest możliwość zwracania referencji do zmiennej (kod poniżej), tylko sam się dziwię czemu php wyrzuca błąd, przy próbie zapisu wartości do tej zmiennej ( zm() = 'test' ).

  1. function &abc(){
  2. $ab = 2;
  3. return $ab;
  4. }

l0ud
Zrobiłem przed chwilą kilka prób i za każdym razem PHP zwracało błąd "Can't use method return value in write context" smile.gif Podpatrzyłeś gdzieś takie rozwiązanie?

flashdev, w Twoim przypadku to i tak nie ma prawa działać: po co komu referencja do lokalnej zmiennej, która przestaje istnieć już po wyjściu z funkcji? tongue.gif
flashdev
Cytat(l0ud @ 26.08.2009, 23:46:08 ) *
Zrobiłem przed chwilą kilka prób i za każdym razem PHP zwracało błąd "Can't use method return value in write context" smile.gif Podpatrzyłeś gdzieś takie rozwiązanie?

flashdev, w Twoim przypadku to i tak nie ma prawa działać: po co komu referencja do lokalnej zmiennej, która przestaje istnieć już po wyjściu z funkcji? tongue.gif


Chodziło mi oczywiście o coś takiego, tylko nie chciało mi się tego napisać:

  1. class test{
  2. public $a;
  3.  
  4. public function show(){
  5. echo $this->a . '<br />';
  6. }
  7.  
  8. public function &get(){
  9. return $this->a;
  10. }
  11. }
  12.  
  13. $test = new Test();
  14. $test -> show();
  15. $test -> get() = 3;
  16. $test -> show();


Cytat
Fatal error: Can't use method return value in write context in E:\xampp\htdocs\***.php on line 17
nu_moon
Troche zamieszałęm, chodziło mi o takie rozwiązanie

  1. $obiekt->zmienna = 'zmienna lub wartosc';


Z tym ze zmienna, która bedzie w obiekcie chciałbym zeby była w jakiś sposób "dotępna do obróbki funkcją, tzn nie chcodzi mi o proste przypisanie wartości, nie wiem czy to dobrze wyjaśniam.

Przykładowe zastosowanie :
  1. $obiekt->zmienna = 'wartość';


Teraz, wykonujemy na zmiennej np. strtolower(), zmienna jest zapisana do tablicy (klucz o nawie ' zmienna '), i przypisana zostaje jej wartość łańcucha znaków.
O coś takiego mi chodzi tylko nie wiem jak to uzyskać :/

generalnie moge uzyskać to samo przez :

$obiekt->metoda('zmienna', 'wartosc');
ale chodzi mi bardziej o uproszczenie zapisu

Pozdrawiam
NuLL
  1. <?php
  2.  
  3. class FooBar{
  4.  
  5. protected $data=array();
  6.  
  7. public function __set($name,$value){
  8.  
  9. return method_exists($this,'set'.ucfirst($name)) ? $this->{'set'.ucfirst($name)}($value) : $this->data[$name]=$value;
  10. }
  11.  
  12. protected function setFoo($value){
  13.  
  14. return $this->data['foo']=strtolower($value);
  15. }
  16.  
  17. public function __get($name){
  18.  
  19. return isset($this->data[$name])? $this->data[$name] : NULL;
  20. }
  21. }
  22.  
  23. $foobar=new FooBar();
  24.  
  25. $foobar->bar='BAR';
  26.  
  27. echo $foobar->bar; // BAR
  28.  
  29. $foobar->foo='FOO';
  30.  
  31. echo $foobar->foo; // foo

A tak nie wystarczy ? smile.gif
seth-kk
mozesz pokombinowac z przeciazeniem __set ale to raczej przerost formy nad trescia w przypadku php
flashdev
Cytat(nu_moon @ 27.08.2009, 00:14:54 ) *
Troche zamieszałęm, chodziło mi o takie rozwiązanie

  1. $obiekt->zmienna = 'zmienna lub wartosc';


Z tym ze zmienna, która bedzie w obiekcie chciałbym zeby była w jakiś sposób "dotępna do obróbki funkcją, tzn nie chcodzi mi o proste przypisanie wartości, nie wiem czy to dobrze wyjaśniam.


  1. class test{
  2. public $a;
  3.  
  4. public function set($n){
  5. $this->a = $n;
  6. }
  7. }
  8.  
  9. $b = 1;
  10. $test = new Test();
  11. $test -> a = &$b;
  12. echo $b;
  13. $test -> set(3);
  14. echo $b;
seth-kk
jemu bardziej chodzi o odpowiednik
  1. public function set a($value)
  2. {
  3.  
  4. }

z as 2+
nu_moon
To czego szukałem udało się uzyskać dzięki setterom.
Dzięki wszystkim za pomoc. 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.