Generički argument php

da li php podržava generičke funkcije, tipa ako želim pri pozivu funkcije poslati tip argumenta koji šaljem?

Ne, samo pri definiciji funkcije ti radiš type declaration (type hinting).
Očekuje se da takav parametar proslijediš, u protivnom će biti izbačen throwable/error.
Otkud ti je iskočilo to?

šteta ako nema, ne kužim što misliš otkud mi je iskočilo?
Pišem klasu koja će procesuirati HTTP response i taj response želim da može biti i lista i objekt ovisno o tome da li je korisnik u POST requestu tražio objekt ili listu.

mogu napraviti ako ne definiram tip argumenta, ali želio bih deklarirati što je više moguće.

Izgubio si me. Daj kod da ne razmišljam (nepotrebno) previše.

u nekoliko datoteka je kod i razdijeljen po klasama, probat ću objasniti možda uz primjer iz Typescripta opet, slično i u C#

deklaracija funkcije:

 response<T>( _Data: T) {
     this.Response = _Data;
     // neki dalje kod
}

Poziv funkcije iz derug klase A:

response<string>('neki string')

Poziv funkcije iz derug klase B:

response<number>(225)

A evo i PHP:

Trebalo bi valjda da možeš riješiti kroz constructor interface type hinting:

Ne znam da l’ ti uslovljava code revamp sveg ostalog pristupa al’ ovako k’o u klipu bi se nazvalo recimo ispravnim.

PHP 8 će donijeti union hinting and return types pa je valjda to još jedna mogućnost kako riješiti.

1 Like

Gledam video koji si postavio, vidim da predavač objašnjava što su je interface i kako se koristi, inače znam što je interface i koristim ih u projektu. Ima greška u vide-u, PaymantInterface mu ima krivo deklariranu metodu, trebala bi biti paymentProccess(), a kod njega je payNow().

Šteta u php-u na žalost interface prima samo metode, a ne i property, ali dobro nije takav problem najvažnije su metode.

Pokušat ću ovaj slučaj kasnije riješiti Interfaceom pa napišem rezultat.

Interface opcenito opisuje ponasanje, a ne strukturu podataka mada u Typescript-u mozes staviti unutra sta zelis, samim tim pretpostavljam da je ista stvar i u C# jer…Microsoft :slight_smile:

Koliko vidim PHP8 dobija i union-type https://www.amitmerchant.com/union-types-php/ tako da ces moci reci object | array za definiciju tipa podataka, tako da vjerujem da ces i to moci iskoristiti.

Da, da. Pomen’o sam već. :slight_smile:

@costlyDeveloper
Pogledaj recimo kako Laravel radi resolving bound/needed class

https://laravel.com/docs/8.x/container#contextual-binding

https://laravel.com/docs/8.x/container#binding-primitives

https://laravel.com/docs/8.x/container#binding-typed-variadics

‘Oću da kažem da nije ništa novo u PHP-u al’ ti treba aplikacija sa ServiceContainer-om u kojoj su već postavljene stvari za ovakvo korištenje (Laravel, Symfony, Mezzio).

da to je jedna od opcija, zvuči ok moguće da prebacim na php 8 kad izađe.

teško mi je počet čitati o laravel-u tako stihijski jer ne kužim puno drugih stvari o tom frameworku kako funkcioniraju. zapravo ne znam baš ništa o php frameworku.

Video mi odvukao paznju, tako da nisam ni uocio text ispod :smiley:

Service Container je opštiji princip od framework-a.
Zato sam ga i izvuk’o jer će se naći (ćeš se susretati sa istim) u fw-cima.

https://php-di.org/

https://docs.mezzio.dev/mezzio/v3/features/container/laminas-servicemanager/

Jeste, to je jedna od najbitnijih stvari of modern but firstly modular and maintainable PHP application.

Po mom mišljenju, nije nešto za poslije već gorući problem trenutnih aplikacija koje ne koriste service container + dependency injection naravno k’o i ostale blagodeti PHP-a.

Pa jesi li vidio (odgled’o od početka do kraja video) kako koristi interface u konstruktoru tako da može primiti različite objekte?

pogledam detaljnije linkove što si poslao ovih dana, a što se tiče interfacea pogledao sam od početka do kraja, to sam sve znao i ranije. Samo radi se o array i object tipu argumenta i povratne vrijednosti, nisam siguran da li ću to moći riješiti sa interfaceom, razmislit ću još o tome.

hydrate i extract metode mogu u tome pomoći:

https://docs.laminas.dev/laminas-hydrator/v3/strategies/hydrator/

Al’ sve što nudim ovde ti rješava trenutni problem. Ovakvim tempom ćeš samo u komplikovanije zahtjeve da upadaš.
Kako god, trudiću se da ti ponudim najkompleksnija/najbolja rješenja koja su mi na pameti. :grinning:

1 Like