Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czemu mi coś działa pod v4 a już nie pod v5
Forum PHP.pl > Forum > PHP > Object-oriented programming
NuLL
  1. <?php
  2.  
  3. class Foo {
  4. function doit() {
  5. if (isset($this)) { ..wywałanie z obiektu .. }
  6. else { .. wywołanie statyczne .. }
  7. }
  8. }
  9.  
  10. ?>


Pod php 4 działa - niestety pod v5 i dopisania static wywala się.

Jakieś pomysły questionmark.gif
dr_bonzo
A gdzie dopisujesz to static? przed funkcja?
Jesli tak to to sa podstawy OO: funkcja statyczna moze odwolywac sie TYLKO do elementow statycznych KLASY, np
  1. <?php
  2.  
  3. class Foo
  4. {
  5. static private $bar;
  6. static public function FooBar()
  7.  {
  8. self::$bar = 7;
  9. }
  10. }
  11.  
  12. ?>

Nie mozesz sie odwolywac do obiektu ($this).
NuLL
Akurat podstawy OOP to ja mam i nawet coś więcej winksmiley.jpg

Kod który jest wklejony u góry działa pod php v4 exclamation.gif

Jakieś pomysł jak mieć takie coś pod v5 questionmark.gif
dr_bonzo
gdzie wpisujesz to static?questionmark.gif
podaj dokladny kod ktory ci nie dziala w php5
DeyV
włąśnie po to jest słowo static przy metodzie, byś nie musiał (a nawet nie mógł) sprawdzać, czy czasem metoda nie została wywołana w obrębie obiektu.
Static wymusza wywołanie z poziomu nazwy klasy, więc jakakolwiek próba odwołania się do słowa $this jest uznawane za błąd już na poziomie parsowania.
W php4 pojawiłby się błąd dopiero na poziomie wykonywania, co znacznie utrudniało debuging.
NuLL
Oki Chłopaki ja się zgadzam smile.gif

Nie mam kodu żadnego w sumie.

Czy jest jakaś metoda aby uzyskać taki efekt w piątce ja w tym kodzie na początku pod v4 (TO DZIAŁA)questionmark.gif
hawk
Oczywiście, że jest. Nawet dwa bardzo dobre sposoby. Może trzy...

1) Dopisać static przed funkcją i wywalić w ogóle if(isset($this)), czyli wszystko robić przez self. To zależy co ta metoda robi, ale nie przychodzi mi do głowy żaden sensowny przykład, w którym byłby to problem.

2) Jeżeli twoja metoda robi coś kompletnie innego dla wywołania statycznego i nie-statycznego (fuuuuuj!), to zrób z tego dwie metody. To proste - jeżeli coś nijak do siebie nie pasuje, to po co wpychać na siłę?

3) Pewnie nie będzie działać, ale jak chcesz to sprawdź. W PHP5 słowo kluczowe static nie jest obowiązkowe (kompatybilność wstecz, chociaż dla reflection na pewno nie jest to bez różnicy). Więc możesz je wywalić i zobaczyć czy wtedy php przełknie twój kod.

Jednak opcji 3 nie polecam, nawet jeżeli działa, bo to po prostu jest zły kod.
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.