Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php5] wszystko jest obiektem
Forum PHP.pl > Inne > Oceny
Apo
nudziło mi sie i postanowiłem napisać coś dziwnego smile.gif

  1. <?php
  2.  
  3. class Box {
  4.  
  5. private $box;
  6.  
  7. public function __construct($value = null)
  8. {
  9. if(!is_null($value))
  10. $this->box = $value;
  11. }
  12.  
  13. public function __call($method, $args)
  14. {
  15. if($this->box)
  16.  array_unshift($args, $this->box);
  17.  
  18. return call_user_func_array($method, $args);
  19. }
  20.  
  21. }
  22.  
  23. $ciag = new Box('ciag');
  24. echo $ciag->substr(0, 2); // zwroci "ci"
  25. echo $ciag->strtoupper(); // zwroci "CIAG"
  26.  
  27. $box = new Box;
  28. echo $box->strlen('cos dlugiego'); // zwroci 12
  29.  
  30. ?>
nospor
widac musialo ci sie bardzo nudzic...

Czemu to ma sluzyc? Jaki jest tego cel? Wwalane na sile obiektowki ?
Przeciez to ani nie jest lepsze, ani szybsze ani tym bardziej optymalne od normalnego wywolania strlen, strupper i innych funkcji.
Apo
w pogoni za Java
nospor
Cytat
w pogoni za Java
No to Twoj kod jest bardzo cienki, albo nie znasz javy. A gdzie wyjątki? tongue.gif

A na powaznie: naucz sie odrozniac "pogoń" od "doczepiania sobie kuli do nogi" smile.gif
Apo
e tam empathon twierdzi ze to jest "Zimny łokieć oop" ;]
empathon
Mi to przypomina ruby w którym analogicznie można działać na obiekcie.
Do normalnego użytku z pewności jest bezsensowane ale do czegoś musi się przydać. Trzeba pokombinować bo według mnie jest dość sprytne smile.gif
Parę dodatkowych metod i będzie magia winksmiley.jpg
starach
Eee pomysł ciekawy ale jakoś specjalnie nie wiem do czego to się ma przydać wywoływanie funkcji php z jakiegoś obiektu ? Po co wywarzać otwarte drzwi ?
dr_bonzo
Tez mi sie wydaje "a po co to?".

Mozna by np. uzyc na tym funkcji mysql_* i nie przekazywac wszedzie resource polaczenia, czy wyniku zapytania ale:
- brak podpowiadania skladni
- dlugosc kodu bedzie wieksza
- mamy PDO
itp.


W kazdym badz razie czekam na jakies praktyczne wykorzystanie.
tuner
Koncepcja rozszerzenia obiektówki PHP jest ciekawym pomysłem. Czekam na rozwiązania, które mogłyby być zastosowane w praktyce.
Cysiaczek
@Apo - Powtórzę kolegów - podczepianie na siłę. Aby jednak nie być jednostronnym, to powiem, że sam napisałem podobne metody, ale tylko w niektórych obiektach i tylko w takich, które wykonywały np. strtoupper(), ucfirst() i dodatkowo wykonywały kilka innych czynności.

Pozdrawiam.
dr_bonzo
Ha!
Jako ze nie kodowalem dawno w php (ruby + java) i teraz wrocilem do php to brakowalo mi pelnej obiektowosci, a raczej wywolywania metod na obiektach

$tablica->count()

zamiast wywolywania funkcji z argumentem

count( $tablica)

I sobie o tym poscie przypomnialem, tyle ze myslalem ze ta mozliwosc jest dolaczana do wszystkich typow bazowych biggrin.gif A takto to szkoda czasu na ciagle meczenie sie z new Box().
Apo
@dr_bonzo zawsze możesz do konstruktora wrzucić tworzenie obiektu, jest to wygodne jeśli jakiegoś FW używasz smile.gif
hwao
Można dodać rzutowanie typów wtedy skrypt robi to sam z Ciebie. (przy deklaracji, ustala sie tym i przy return zawsze daje (int) ect.)

Wg mnie pomysł bardzo ciekawy, może nie koniecznie użyteczny, ale moim zdaniem takie coś jest dużo lepsze niż 30 system szablonów z taka sama oklepana składnia.
sf
Cytat(dr_bonzo @ 12.05.2007, 23:15:22 ) *
Mozna by np. uzyc na tym funkcji mysql_* i nie przekazywac wszedzie resource polaczenia, czy wyniku zapytania ale:
- brak podpowiadania skladni
- dlugosc kodu bedzie wieksza
- mamy PDO


Wydaje mi się, że do curl byłoby bardzo dobre winksmiley.jpg Można by było od razu dodać metodę do tworzenia danych do POST czy wyciąganie informacji o ciastkach.

  1. <?php
  2. class Curl
  3. {
  4. private $rRes;
  5.  
  6.  
  7. public function __construct($sURL = NULL)
  8. {
  9. $this->rRes = is_null($sURL) ? curl_init() : curl_init($sURL);
  10. }
  11.  
  12.  
  13. public function __call($sMethod, $aArgs)
  14. {
  15. if($aArgs[0] == CURLOPT_POSTFIELDS) {
  16. $this->postFields($aArgs[1]);
  17. }
  18.  
  19. array_unshift($aArgs, $this->rRes);
  20.  
  21. return call_user_func_array('curl_' . $sMethod, $aArgs);
  22. }
  23.  
  24.  
  25. private function postFields(&$aData)
  26. {
  27. foreach($aData as $sKey => $mValue) {
  28. $aTmp[] = $sKey . "=" . urlencode($mValue);
  29. }
  30.  
  31. $aData = implode('&', $aTmp);
  32. }
  33. }
  34. ?>


  1. <?php
  2. require_once 'Curl.php';
  3.  
  4. $oCurl = new Curl('http://www.php.net');
  5. $oCurl->setopt(CURLOPT_POST, 1);
  6. $oCurl->setopt(CURLOPT_POSTFIELDS, array('post' => 'test'));
  7. $oCurl->setopt(CURLOPT_RETURNTRANSFER, 1);
  8. echo $oCurl->exec();
  9. $oCurl->close();
  10. ?>
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.