Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blad przy zwracaniu $this
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
Czesc pisze nowa klase do walidacji danych chce konfigurowac walidator w taki sposob:
  1. $validation -> add_rule('name', new str()->configure(array('field' => 'name', 'required' => true)));

Jednak dostaje blad:
Cytat
Parse error: syntax error, unexpected T_OBJECT_OPERATOR

Jednak w klasie str mam tak:
  1. public function __construct()
  2. {
  3. parent::__construct();
  4. return $this;
  5. }

Zwracam this wiec powinno dzialac czy moze robie cos zle?Bo troche zamotany juz jestem
Crozin
To jest po prostu ułomność składni języka, jakich w PHP wiele - musisz użyć dodatkowej zmiennej.

PS. Konstruktor nie powinien niczego zwracać.

EDIT:
Mógłbyś to rozwiązać wykorzystując metodę statyczną, tworzącą i zwracającą obiekt: Str::newInstance(...)->doSth();, ale to bardziej ominięcie niż rozwiązanie problemu.
batman
W PHP nie można tak zrobić:
  1. new str()->configure()

Musisz użyć dodatkowej zmiennej.
marcio
Cytat
EDIT:
Mógłbyś to rozwiązać wykorzystując metodę statyczną, tworzącą i zwracającą obiekt: Str::newInstance(...)->doSth();, ale to bardziej ominięcie niż rozwiązanie problemu.

Hmm ale to chyba nie jest zle podejscie? czyli cos takiego
  1. public static function get_istance()
  2. {
  3. return new str();
  4. }
adbacz
Imho jest to coś jak Singleton. Warto by zastosowac nową zmienną i przypisać do niej obiekt tego właśnie validatora. Jak pisał batman, nie można zrobić w ten sposób, ale można zrobić coś takiego:
  1. $new = new str();
  2. $validation -> add_rule('name', $new->configure(array('field' => 'name', 'required' => true)));


PS. Konstruktor nie moze zwracać żadnych danych, ale może na nich operować.
Crozin
@adbacz: Możesz rozwinąć dlaczego uważasz, że jest to coś jak singleton?
nospor
Bo singleton ma metode o nazwie getInstance i marcio napisał get_instance() wink.gif
marcio
@adbacz takie rozwiazanie jest kijowe to juz wole do konstruktora podawac konfiguracje.

@crozin & @nospor to nie mial byc singleton tylko to samo co mamy w kohanie metoda klasa::factory() zeby mozna bylo wlasnie zrobic method chaining...
nospor
Cytat
@crozin & @nospor to nie mial byc singleton tylko to samo co mamy w kohanie metoda klasa::factory() zeby mozna bylo wlasnie zrobic method chaining...
Ba. my to wiemy. My się odnosimy do wypowiedzi adbacza a nie Twoich 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.