Statične metode ne postoje u php


Mislim da kod govori za sebe. Ovo je prema mojem skromnom poznavanju OOP trebalo izbaciti grešku.
Ali ne izbacuje. 
Po meni postoji klasa TestStaticMethod koja nema statičkih metoda.
Ispod klase imamo klasu koja poziva statičnu metodu callAsStatic() i vraća kod.

Mislim jel sam ja negdje pogriješio u shvaćanju statičnim metoda ili je ovo gore još jedna mana guranja OOP tamo gdje mu nije mjesto.

Sljedeći kod:

[code=php]<span class="syntaxhtml"><br /><span class="syntaxdefault"><?php&nbsp;<br /><br /></span><span class="syntaxkeyword">class&nbsp;</span><span class="syntaxdefault">TestStaticMethod<br /></span><span class="syntaxkeyword">{<br />&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;function&nbsp;</span><span class="syntaxdefault">callAsStatic</span><span class="syntaxkeyword">()<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxstring">"ova&nbsp;funkcija&nbsp;se&nbsp;bi&nbsp;smjela&nbsp;prikazati"</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />echo&nbsp;</span><span class="syntaxdefault">TestStaticMethod</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">callAsStatic</span><span class="syntaxkeyword">();<br /><br /><br /></span><span class="syntaxdefault">?></span>&nbsp;<br /></span>[/code]


Radi isto kao gornji primjer. Ali primjetite da ovdje imamo statičnu metodu.

Mislim da kod govori za sebe. Ovo je prema mojem skromnom poznavanju OOP trebalo izbaciti grešku.
Ali ne izbacuje.
Po meni postoji klasa TestStaticMethod koja nema statičkih metoda.
Ispod klase imamo klasu koja poziva statičnu metodu callAsStatic() i vraća kod.

Mislim jel sam ja negdje pogriješio u shvaćanju statičnim metoda ili je ovo gore još jedna mana guranja OOP tamo gdje mu nije mjesto.

Sljedeći kod:

Radi isto kao gornji primjer. Ali primjetite da ovdje imamo statičnu metodu.

Šta da ne postoje? :slight_smile:

Evo vidi živog dokaza:

Fatal error: Constructor TestStaticMethod::__construct() 
cannot be static in [snip]

Viš’ da PHP zna za statične metode… :smije:

Ne, krivo sam se izrazio, ne da ne postoje već su sve metode ujedno i statičke.
Kod propertija uredno izbacuje grešku:

Calling non-static methods statically generates an E_STRICT level warning.
Što bi to trebalo značiti nemam pojma. Jer jer sam isprobao na par servera i nikakav warning se nije pojavio.

No kad se “normalna” metoda poziva kao statička može se pristupiti samo statičkim djelovima klase.
Tako da vjerovatno ne postoji mogučnost uzrokovanja nekih problema.

E_STRICT se treba posebno aktivirati ( “error_reporting(E_STRICT)” ) i dostupan je samo u PHP 5.

Ovdje ima više informacija:

http://php.net/manual/en/errorfunc.configuration.php

Inače, bolje je svejedno dodati static deklaraciju, sam Bog zna što slijedeća verzija nosi…

U PHP6 E_STRICT errori ce biti standardno prijavljivani (dio E_ALL) tako da je bolje stavljati static da kasnije ne bi bilo problema.
Ako ti je stalo do toga da ti je php code bude potpuno validan najbolje je u php.ini error_repporting staviti na “E_ALL | E_STRICT”, ovo prijavljuje sve moguce errore.

[quote=“gorrc”]Calling non-static methods statically generates an E_STRICT level warning.
Što bi to trebalo značiti nemam pojma. Jer jer sam isprobao na par servera i nikakav warning se nije pojavio.

No kad se “normalna” metoda poziva kao statička može se pristupiti samo statičkim djelovima klase.
Tako da vjerovatno ne postoji mogučnost uzrokovanja nekih problema.[/quote]

[quote=""]For BC reasons calling a non static method statically keeps $this.

This is not my decision - often enough i suggested to fix static member
behavior now that we can declare them in PHP 5. If you ask me there is
no OO in PHP 4 and hence we should never have taken care of BC with 4.
[/quote]

[quote=""]For BC reasons calling a non static method statically keeps $this.

This is not my decision - often enough i suggested to fix static member
behavior now that we can declare them in PHP 5. If you ask me there is
no OO in PHP 4 and hence we should never have taken care of BC with 4.[/quote]

Prijavljivano je ko bug … izgleda da tek s novim verzijama to “popravljaju”.

ma php od početka nije bio zamišljen kao OO jezik, i sve ovo je dosta prisilno umetanje podrške za OO… Nisu mi jasne neke stvari kod stvaraoca php-a u vezi OOP. Ujedno to i deklariranje varijable bez tipa podataka smatram možda najvećim nedostacima php-a (makar neki smatraju to kao prednosti)

PHP od pocetka nije zamisljen za puno toga. Inicijalno je to bio HTML templejt sustav ako se dobro sjecam.

OOP u PHP-u ima nekih nedostataka … ali ima i jako puno zgodnih mogucnosti. Sve u svemu, on se jos razvija i sa novijim verzijama ce sigurno biti sve bolji i bolji.

[quote=“ivan.skugor”]PHP od pocetka nije zamisljen za puno toga. Inicijalno je to bio HTML templejt sustav ako se dobro sjecam.

OOP u PHP-u ima nekih nedostataka … ali ima i jako puno zgodnih mogucnosti. Sve u svemu, on se jos razvija i sa novijim verzijama ce sigurno biti sve bolji i bolji.[/quote]

tako je, zato i ASP.NET u startu smatram dosta kvalitetnijim jezikom…
php bi se trebao od nule počet pisat za web kakav sad postoji i s načelima kakva moderni jezici imaju, jer ovako je to samo krpanje rupa i pitanje koliko dugo će moći konkurirati… Znam mnogi se neće složiti s time jer im je php drag, no objektivno gledano (radio sam i radim i u php-u i u ASP.NET-u) php je par godina u zaostatku…

(ps nisam možda ni trebao spominjati ASP.NET već općenito C#, jer ionak ja više radim u C#-u nego u ASP.NETu (ne koristim nikakve webkontrole iz ASP.NETovog frameworka, već radim kod manualno od nule) )

[quote=“Kečko”]tako je, zato i ASP.NET u startu smatram dosta kvalitetnijim jezikom…
php bi se trebao od nule počet pisat za web kakav sad postoji i s načelima kakva moderni jezici imaju, jer ovako je to samo krpanje rupa i pitanje koliko dugo će moći konkurirati… Znam mnogi se neće složiti s time jer im je php drag, no objektivno gledano (radio sam i radim i u php-u i u ASP.NET-u) php je par godina u zaostatku…

(ps nisam možda ni trebao spominjati ASP.NET već općenito C#, jer ionak ja više radim u C#-u nego u ASP.NETu (ne koristim nikakve webkontrole iz ASP.NETovog frameworka, već radim kod manualno od nule) )[/quote]

Ja sam presao sa ASP.net-a (C#) na PHP … :smiley:

Mislim da nije PHP losiji jezik od C#-a, bas suprotno. PHP jest zamisljen kao isljucivo web orjentirani jezik, C# bas i nije.

Na kraju se ionako to svede na to koliko ko voli neki jezik i koliko mu pase. Mislim da je vazno znati dobro programirati, sam jezik je tu manje bitan.

[quote=“ivan.skugor”]Ja sam presao sa ASP.net-a (C#) na PHP … :smiley:

Mislim da nije PHP losiji jezik od C#-a, bas suprotno. PHP jest zamisljen kao isljucivo web orjentirani jezik, C# bas i nije.

Na kraju se ionako to svede na to koliko ko voli neki jezik i koliko mu pase. Mislim da je vazno znati dobro programirati, sam jezik je tu manje bitan.

[/quote]

ovo je jako dobro razmišljanje :slight_smile:

samo ne razumijem ovaj dio u vezi

to sam već u više navrata znao čuti, ali nikad nisam vidio neki konkretni primjer te razlike, zašto je to točno, neku činjenicu koja bi potkrijepila tu izjavu, ili želiš još bolje, zašto je bilo koji jezik bolji za web, a neki za desktop aplikacije?
pogotovo ako je riječ o konceptu kakav ima cijeli .NET

ps, čuo sam nešt da i s php-om možeš radit u .NETu, makar nisam vidio ili isprobao

Zato jer je inicijalno zamisljen za to.

Mozda je bolja razlika npr. C++ i PHP jer kad spomenes C# obicno mislis na (odnosno dosta ljudi podrazumijeva) cijeli .net (a to nije bas korektno).

I sa C+±om i sa PHP mozes raditi npr. grafiku i rad sa bazom. Pa sad razmisli sta ces s kojim lakse napraviti. :slight_smile:

upravo sam na to ciljao u svojoj izjavi :slight_smile: ASP.NET je stvoren baš za web, a ako gledaš samo C# on po mojem mišljenju nema nikakve prednosti dal radiš za web, za windows, za bilo što…
zbog toga mi tvoja izjava prije nije sjela…

c++ je sasvim druga stvar, no ako je brzina i performanse weba extremno važno čak bi prije uzeo c++ (makar sigurno nebi uzeo c++, već čisti c) nego php ili ASP.net

[quote=“Kečko”]upravo sam na to ciljao u svojoj izjavi :slight_smile: ASP.NET je stvoren baš za web, a ako gledaš samo C# on po mojem mišljenju nema nikakve prednosti dal radiš za web, za windows, za bilo što…
zbog toga mi tvoja izjava prije nije sjela…[/quote]

Ali ne mozes usporedjivati PHP i ASP.net. Eventualno mozes neki PHP framework …

Al ja tu opet ne vidim neku prednost ASP.net-a, po mom misljenju jedina prednost koju ASP.net ima nad nekim PHP frameworkom je - IDE. :smiley:

[quote=“Kečko”]
c++ je sasvim druga stvar, no ako je brzina i performanse weba extremno važno čak bi prije uzeo c++ (makar sigurno nebi uzeo c++, već čisti c) nego php ili ASP.net[/quote]

:zub:

Kao sta sam rekao vec dosta puta, PHP skoro pa nikad nece biti usko grlo u web aplikaciji. Baza podataka je 99% slucajeva usko grlo.

istina, visual studio je zakon, i druga stvar isto istina sam programski jezik je rijetko usko grlo na webu, baza je već druga priča…
više manje smo u svemu složni, jedino što ti radiš u php-u i on ti više paše, dok s druge strane meni ASP.NET :))
po mojemu su 4. glavne prednosti ASP.NET-a

  1. Sve je objekt, OO je dosta napredniji nego u PHP-u
  2. Type safe
  3. Visual studio
  4. Debug (makar to opet ide za VS)

a ima i php svoje prednosti
glavno bi naveo opensource, veća dostupnost, community…

  1. Od kada je dobro da baš sve bude objekt?
  2. Amen. Ne znam koliko puta sam se pitao - ma jel ovo array ili string?
  3. Koji radi samo na Windowsima…

Iskreno, ASP.NET mi se čini zanimljivim ali prije će se pakao slediti nego li ću ja pisati kod na Windowsima. :slight_smile:

[quote=“voajer”]1. Od kada je dobro da baš sve bude objekt?
2. Amen. Ne znam koliko puta sam se pitao - ma jel ovo array ili string?
3. Koji radi samo na Windowsima…

Iskreno, ASP.NET mi se čini zanimljivim ali prije će se pakao slediti nego li ću ja pisati kod na Windowsima. :)[/quote]

  1. Stvar navike :slight_smile: meni je to super
  2. itekako, em kad lijepo stisneš točku a ono sve opcije što s tim možeš, to opet nije moguće u php-u baš zbog toga jer neznaš ni koji je tip/objekt ta varijabla…
  3. meni to i nije prevelika mana… Prije sam bio dosta zadrti linuxaš isto, a i radio sam samo na linuxu, i glavni razlog zašto više nisam na njima je VS i Photoshop, a ostalo mi više manje i nije bitno, nema neke prevelike razlike…

Osobno bježim od “dogmatičnog programiranja”. Sve ima svoju svrhu, pa makar to bio i goto, statična klasa ili što već. Meni su objekti dobri kada mi treba state - za ostalo može poslužiti i statična klasa…

Zašto bi neki jezik bio za bolji od web od drugog je teško reći jer na kraju ne gledamo jezik nego što s njim možemo učiniti.
No ako izostavimo što s jezikom možemo učiniti i gledamo jednostavnost, brzina deploymenta, učenje itd. siguran sam da je PHP u samom vrhu.
Recimo u C# OOP sam naletio na to da se neke varijable mogu staviti da vrijednost dobivaju u vrijeme kompajliranja a druge za vrijeme kad se aplikacija krene izvoditi.
Mislim da za to web ne igra ulogu ali opet ako učite jezik morate znati.

Negdje sam čak pročitao da prosječan Java developer ne ide iznad 30% mogučnosti Jave dok recimo Actionscript developer praktički može imati jezik u malom prstu.

Meni sad nije sitničaranje jel ima static ili ne već to su pravila igre koja ili sljedimo ili ne.
Benificije su velike, od toga da i drugi ljudi mogu razumjeti kod, održavanje, nemogučnost slamanje aplikacije pogreškom.

Evo primjera koji se neće vjerovatno dogoditi, jer nema smisla:razbi: no primjer je “razbijanja koda” :

Developer je upravo koristeći public metodu izmjenio stanje objekta, što bi trebalo biti nemoguče.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja