Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [OOP] jak napisać taką metodę
nu_moon
post 26.08.2009, 22:26:08
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 26.01.2006

Ostrzeżenie: (0%)
-----


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';
Go to the top of the page
+Quote Post
Fifi209
post 26.08.2009, 22:30:50
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Wątpię aby się dało coś takiego zrobić...
A skąd taki pomysł? Do czego Ci to potrzebne?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
flashdev
post 26.08.2009, 22:40:38
Post #3





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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. }



--------------------
Go to the top of the page
+Quote Post
l0ud
post 26.08.2009, 22:46:08
Post #4





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


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


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
flashdev
post 26.08.2009, 23:04:19
Post #5





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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


--------------------
Go to the top of the page
+Quote Post
nu_moon
post 26.08.2009, 23:14:54
Post #6





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 26.01.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
NuLL
post 26.08.2009, 23:21:38
Post #7





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


  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


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
seth-kk
post 26.08.2009, 23:24:05
Post #8





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

Ostrzeżenie: (0%)
-----


mozesz pokombinowac z przeciazeniem __set ale to raczej przerost formy nad trescia w przypadku php


--------------------
Go to the top of the page
+Quote Post
flashdev
post 26.08.2009, 23:25:27
Post #9





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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;


--------------------
Go to the top of the page
+Quote Post
seth-kk
post 26.08.2009, 23:33:10
Post #10





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

Ostrzeżenie: (0%)
-----


jemu bardziej chodzi o odpowiednik
  1. public function set a($value)
  2. {
  3.  
  4. }

z as 2+


--------------------
Go to the top of the page
+Quote Post
nu_moon
post 27.08.2009, 03:00:17
Post #11





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 26.01.2006

Ostrzeżenie: (0%)
-----


To czego szukałem udało się uzyskać dzięki setterom.
Dzięki wszystkim za pomoc. smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 21:08