Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czemu mi coś działa pod v4 a już nie pod v5
NuLL
post 27.01.2005, 00:49:18
Post #1





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


  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


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
dr_bonzo
post 27.01.2005, 07:32:34
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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).


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
NuLL
post 27.01.2005, 12:12:57
Post #3





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


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

Ten post edytował null 27.01.2005, 12:15:29


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
dr_bonzo
post 27.01.2005, 12:37:36
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


gdzie wpisujesz to static?questionmark.gif
podaj dokladny kod ktory ci nie dziala w php5


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
DeyV
post 27.01.2005, 12:38:32
Post #5





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
NuLL
post 27.01.2005, 12:55:43
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


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


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
hawk
post 27.01.2005, 16:16:14
Post #7





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 21:18