Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $this->metoda1->pole1
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcus753
Witajcie czy jest możliwość przekazania do metody zmiennej w taki sposób: ?

  1. $this->post->name


w CI często jest spotykana konstrukcja typu:

  1. $this->load->library('upload');


w Laravelu mamy nawet:

  1. $user->posts()->withTrashed()->get();


Dzięki za pomoc wink.gif
Crozin
Jakiej zmiennej, do jakiej metody?
marcus753
np.

  1. class input{
  2.  
  3. $post['nazwa1'] = "test";
  4. $post['nazwa2'] = "test2";
  5.  
  6. public function get_post($nazwa){
  7. return $post[$nazwa];
  8. }
  9. }


tyl tylko że tera odwołuje się tak:

  1. $input->get_post('nazwa1');


a chciałbym:

  1. $input->get_post->nazwa1;
adbacz
Żeby tak zrobić, musiałbyś w publicznej właściwości "get_post" trzymać obiekt z publicznymi właściwościami generowanymi na poczekaniu z przychodzącego POSTa.... bez sensu;)

W CI jest tak zrobione, bo jest to "stara szkoła" programowania obiektowego. Już się tak nie programuje i nie powinieneś iść w te ślady. To co jest zrobione w Laravell, to jest przemyślana sktruktura obiektów, coś należy do czegoś i można to coś za pomocą tego czegoś pobrać (masło maślane wink.gif).

Napisz może gdzie chcesz tego użyć i w jakim kontekście, to zaproponujemy Ci jakieś bardziej "nowoczesne" i bardziej optymalne rozwiązanie problemu.
marcus753
dzięki wielkie za pomoc wink.gif po prostu zmienna musi być obiektem wtedy możemy w nieskończoność używac konstrukcji
klasa->własciwosc->obiekt->wlasciwosc->obiekt....

Mam jeszcze pytanie o jedną rzecz, załóżmy że do klasy chciałbym dodawać dynamicznie pola i nigdy nie wiem jakie ostatecznie pola będzie miała ta klasa...

np. robie sobię klase post i w konstruktorze przypisuje wszystkie zmiennej ze zmiennej $_POST do klasy post

coś w stylu:

  1.  
  2. class Post{
  3.  
  4. public function dodaj(){
  5.  
  6. foreach ($_POST as $name => $value){
  7.  
  8. private $this->$name = $value;
  9.  
  10. }
  11. }
  12.  


niestety ze zdefiniowanym dostępem private już nie działa ;(

I pytanie klucz czy coś takiego jest poprawne z punktu widzenia OOP ?

Piszę teraz klasę Input która ma mi zarządzać wszystkimi plikami jakie odbieram od użytkownika i chciałbym zrobić sobie podklasy File, POST, GET, SERVER oraz klasy cookie i session
by_ikar
Tylko pytanie po co? Pamiętam twoje tematy o laravel. No więc tam już masz to wszystko out of box. I w wielu innych FW również. Jaki jest cel tego co tutaj robisz tak w skrócie?
marcus753
Dzięki za zainteresowanie ikar Lkingsmiley.png

Po co ? temat rzeka, setki razy wałkowany. Swoją przygodę z frameworkami zaczynałem od codeignitera, potem przerzuciłem się na laravela którego cały czas się uczę ale podstawy myślę że udało mi się opanować. Teraz zapoznaje się z symfony przy którym zrozumiałem co to znaczy porządny framework a w planach mam jeszcze zapoznanie się z silexem choć to jedynie okrojona wersja symfony więc cudów się nie spodziewam…

Przez to skakanie myślę że do frameworków nabrałem pewnego dystansu - przestałem je obdarzać uczuciami są dla mnie jedynie narzędziami a co z tym się wiążę dostrzegam ich pewne wady. Symfony nadaje się do dużych projektów ale spróbujcie zainstalować go na serwerze wirtualnym kupionym na allegro za 5zł (już widzę ten uśmieszek na waszych ustach wink.gif ) - to jak strzelanie z armaty do komara. Codeigniter jest bardzo fajny ale projekt powoli umiera… Laravel choć seksowny jest w Polsce stosunkowo mało znany,mniejszy od symfony nadal dosyć duży, zresztą 3/4 kodu zostało pobrane z innych frameworków więc to raczej zbiór bibliotek z małymi dodatkami - do tego jakoś mnie do siebie nie przekonał… z innych możliwości mamy kohane która umiera, yii gdzie na drugą wersję czekamy i czekamy i nic… falcona szybki ale również na ołówku go nie postawimy.

Szukam czegoś pokroju codeignitera - z małymi zmianami: ma się szybko ładować, uwzględniać nową architekturę, ma być jasny, przejrzysty, dawać mi białe płutno gotowe do pracy, uniwersalny - działać na każdym serwerze i dawać użytkownikowi możliwość wywalenia połowy plików jeśli z nich nie korzysta. Jestem frontend developerem i myślę że podobnie jak 90% użytkowników potrzebuje zaledwie kilku funkcjonalności: sesje,cooki,bazadanych,mvc i możliwość prostego pisania bibliotek rozszerzających (jeśli coś będę potrzebował to sobie to albo napiszę albo skopiuję) - to wszystko.

Z różnych baz danych nie korzystam więc po co mi zapytania ORM które niekiedy potrafią być dłuższe od czytelnego kodu SQL, system szablonów - czytelny ale to jest tylko bajer nakładka, zresztą twiga mogę sobie doinstalować i tak mógłbym wymieniać.

Prosty przykład: w laravelu ktoś chciał zrobić logowanie z uwzględnieniem emaila lub loginu + hasła w SQL to jedna linijka ale nie tu trzeba było robić specjalną funkcję która oszukuje domyślny panel, kolejna sprawa: $table->rememberToken(); załóżmy że nie chcę tego mieć i co ? kicha muszę to mieć takie pole w tabeli koniec kropka.

Niestety nie znalazłem nic ciekawego co spełniało by moje kryteria. CI był najbliżej z nich ale nadal nieco za duży np. wstawianie buziek i uśmieszków - po cholerę to potrzebne ?

Na razie piszę swoje biblioteki tak głównie w celach edukacyjnych potem spróbuje to jakoś skleić mvc jeśli nic z tego nie będzie ok zostawię temat ale może akurat uda mi się stworzyć coś praktycznego z czego będę korzystał i na czym będę zarabiał. Do tej pory byłem wstanie się obejść bez ffw więc pisząc swój ubogi i poszatkowany ale dostosowany do moich potrzeb fw raczej źle na tym nie wyjdę.
nrm
Cytat(marcus753 @ 17.07.2014, 23:36:09 ) *
Prosty przykład: w laravelu ktoś chciał zrobić logowanie z uwzględnieniem emaila lub loginu + hasła w SQL to jedna linijka ale nie tu trzeba było robić specjalną funkcję która oszukuje domyślny panel

yyy, że co?

Cytat(marcus753 @ 17.07.2014, 23:36:09 ) *
kolejna sprawa: $table->rememberToken(); załóżmy że nie chcę tego mieć i co ? kicha muszę to mieć takie pole w tabeli koniec kropka.

Nie musisz bo:
1. w ogóle NIE musisz korzystać z Laravelowego AUTHa
2. a jak chcesz już korzystać to możesz podmienić implementacje na swoją. Ja tak zrobiłem z sesjami.
marcus753
Cytat(nrm @ 18.07.2014, 02:16:38 ) *
yyy, że co?


na przykład coś takiego:
  1. $field = filter_var($usernameinput, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
  2.  
  3. if (Auth::attempt(array($field => $usernameinput, 'password' => $password), true)) {
  4. // ...
  5. }


Cytat(nrm @ 18.07.2014, 02:16:38 ) *
Nie musisz bo:
1. w ogóle NIE musisz korzystać z Laravelowego AUTHa
2. a jak chcesz już korzystać to możesz podmienić implementacje na swoją. Ja tak zrobiłem z sesjami.


Otóż to tyle że coraz częściej dochodzę do wniosku że: z logowania wbudowanego nie korzystam, paginacje mam połączoną z wyszukiwaniem więc też nie korzystam, migracje ciekawe ale importuje/eksportuje plik co jest łatwiejsze więc nie korzystam? I jak tak podsumuje z czego korzystam to nagle okazuje się że pół frameworka jest zbędne wink.gif

Walidacja formularzy ? ja formularze waliduje ajaxem i znowu trzeba pisać coś swojego? tak naprawdę laravel nie daje mi nic więcej oprócz samego szkieletu i 20 MB plików gdzie w CI miałem zaledwie 4 MB a robił to samo, u siebie pewnie będę miał < 1MB a uzyskam ten sam efekt więc może dobrze było by napisać sobie taki zwykły szkielet a przy okazji się czegoś nauczyć - skoro go nie ma na rynku wink.gif
by_ikar
Formularze możesz sprawdzać javascriptem tylko w celu nie przeładowywania strony, bo tak czy inaczej po stronie PHP zawsze powinieneś filtrować dane. Podstawowa zasada - nigdy nie ufaj użytkownikowi, oraz nigdy nie myśl że użytkownik jest na tyle głupi żeby ci nie zapodać sqlinjection.

No tak, ale do takich małych rzeczy, nadają się komponenty symfony. Sam na potrzeby mojego znajomego u którego jak aplikacja ma powyżej 1mb alokowanej pamięci, to przy większym ruchu wywala mu out of memory (100k UU dziennie). Dlatego napisałem żebyś powiedział co chcesz na tym zdziałać. Symfony to nie tylko FW ale reużywalne komponenty, bierzesz taki routing, httpfoundation, httpkernel, classloader, dispatcher i już masz "swojego" frameworka. Dorzucasz do tego debug i masz obsługę błędów. Do tego dorabiasz trochę swojej logiki i gotowe. A masz już tam gotowych wiele rzeczy, masz routing, masz dispatchera, masz request+response i obsługę sesji (różnych). Czyli w sumie prawie to samo co silex. Masz jakieś podstawowe rzeczy, jak request, czy response, czy obsługę błędów i z resztą robisz co chcesz. Potrzebujesz ORM? No to sobie go integrujesz. Nie potrzebujesz? No to napisz sobie jakąś prostą klasę do łączenia z bazą, albo użyj po prostu PDO. Pisanie wszystkiego całkowicie od nowa IMO mija się z celem. Ja już to przechodziłem, i mogę ci powiedzieć że to się w ogóle nie kalkuluje. Super, zyskasz na 10 plikach mniej (przeważnie interfejsach), ale na prędkości wczytywania aplikacji czy ilości alokowanej pamięci zyskasz jakieś 10-15%. No chyba że napiszesz to bardzo ubogo, to wtedy rezultaty może będą lepsze, ale i możliwości również będą mniejsze. Poważnie, zainteresuj się komponentami symfony, bo to jest na prawdę bardzo dobry kod, który jest już przetestowany, który na bieżąco ma wprowadzane poprawki, nad którym siedzi więcej niż 1 osoba.
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-2024 Invision Power Services, Inc.