NuLL
27.01.2005, 00:49:18
<?php
class Foo {
function doit() {
if (isset($this)) { ..wywałanie z obiektu
.. } else { .. wywołanie statyczne .. }
}
}
?>
Pod php 4 działa - niestety pod v5 i dopisania
static wywala się.
Jakieś pomysły
dr_bonzo
27.01.2005, 07:32:34
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
<?php
class Foo
{
static public function FooBar
() {
self::$bar = 7;
}
}
?>
Nie mozesz sie odwolywac do obiektu ($this).
NuLL
27.01.2005, 12:12:57
Akurat podstawy OOP to ja mam i nawet coś więcej

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

Jakieś pomysł jak mieć takie coś pod v5
dr_bonzo
27.01.2005, 12:37:36
gdzie wpisujesz to static?

podaj dokladny kod ktory ci nie dziala w php5
DeyV
27.01.2005, 12:38:32
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
27.01.2005, 12:55:43
Oki Chłopaki ja się zgadzam

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)
hawk
27.01.2005, 16:16:14
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.