new Class()->method() ?
Robbe
- php
0 Johannes Zeller0 Cheatah0 rob0 Robbe0 rob0 Johannes Zeller0 Robbe
hi,
kennt jemand eine möglichkeit über eine ähnliche konstruktion direkt auf die methoden des neu erstellten objektes zugreifen zu können? es geht mir darum eine variable für dieses objekts zu vermeiden und auch codereduzierung.
(php5)
gruss,
robbe.
Hallo Robbe,
kennt jemand eine möglichkeit über eine ähnliche konstruktion direkt auf die methoden des neu erstellten objektes zugreifen zu können? es geht mir darum eine variable für dieses objekts zu vermeiden und auch codereduzierung.
Nein, dass ist in PHP nicht möglich. Du musst eine Variable dazu verwenden. Da in PHP 5 bei der Zuweisung eines Objektes an eine Variable keine Kopie des Objektes mehr erzeugt wird, sondern nur eine Referenz auf das Objekt zugewiesen wird, würde es auch keinen großen Unterschied machen, wenn du direkt auf das neu erzeugte Objekt zugreifen könntest.
In PHP 4 kann man auch eine Referenz statt einer Kopie zuweisen, dort muss man aber dafür explizit den Referenz-Operator & verwenden.
Schöne Grüße,
Johannes
Hi,
kennt jemand eine möglichkeit über eine ähnliche konstruktion direkt auf die methoden des neu erstellten objektes zugreifen zu können? es geht mir darum eine variable für dieses objekts zu vermeiden und auch codereduzierung.
dann möchtest Du also eine statische Methode verwenden.
Cheatah
Hi!
new Class()->method()
kennt jemand eine möglichkeit über eine ähnliche konstruktion direkt auf die methoden des neu erstellten objektes zugreifen zu können?
Nein.
Wenn du auf eine Methode zugreifen willst, mußt du zuerst ein Objekt instantiieren.
Es sei denn, es handelt sich um eine statische Methode.
Du kannst auf statische Methoden zugreifen, ohne daß es ein Objekt dieser Klasse gibt.
class Klasse
{
// statische Methode
public static function statischeMethode()
{
echo 'Statische Methode aufgerufen.';
}
}
echo Klasse::statischeMethode();
Auf die gleiche Art und Weise kannst du auch auf statische Eigenschaften mit dem ::-Operator zugreifen.
Diese werden, wie auch die Methoden, mit dem Schlüsselwort static deklariert.
es geht mir darum eine variable für dieses objekts zu vermeiden
Warum?
und auch codereduzierung.
Das:
$foo = new bar();
$foo->method();
ist dir zuviel Code?
Naja, wie auch immer:
Du suchst scheinbar nur nach einer Kurzschreibweise, die es nicht gibt.
Der Einsatz von statischen Methoden/Eigenschaften wird dein Problem nicht lösen.
Schöner Gruß,
rob
es geht mir darum eine variable für dieses objekts zu vermeiden
.. Warum?
weil es sinnloser speicher bis zur beendung der methode ist, und bei folgenden schleifen kann das schon ne rolle spielen ausserdem ist es unschön.
.. ist dir zuviel Code?
jap :)
zuviel code = weniger überblick -> das gilt immer.
Es sei denn, es handelt sich um eine statische Methode.
Der Einsatz von statischen Methoden/Eigenschaften wird dein Problem nicht lösen.
das stimmt nich ganz. darüber hab ich mir jetzt auch ne krücke dafür die folgende aufrufschematas zulässt:
logger::init(__METHOD__)->info("logge dies & das..");
es handelt sich in diesem falle um ein kleines logging-framework, welches nur aufgerufen werden darf, wenn die infos über den aufrufer bekannt sind.
besten gruss,
robbe.
Hi!
Der Einsatz von statischen Methoden/Eigenschaften wird dein Problem nicht lösen.
das stimmt nich ganz. darüber hab ich mir jetzt auch ne krücke dafür die folgende aufrufschematas zulässt:
logger::init(__METHOD__)->info("logge dies & das..");
hmm... Naja... Wenn du meinst, daß das für dich das Richtige ist...
Ich dachte halt, der Einsatz von statischen Methoden würde das Problem nicht lösen, weil man halt nicht einfach zwischen normalen Methoden und statischen Methoden hin- und herwechseln kann. Das ist ja schließlich nicht nur eine alternative Schreibweise.
Wenn du objektorientiert programmierst, dann tust du das ja aus einem bestimmten Grund.
Und so gibt es halt nicht immer ein Objekt einer Klasse.
Und Statische Methoden sind nicht im Objekt der Klasse verfügbar.
Und $this gibt es auch nicht.
Und statische Methoden können nicht in abgeleiteten Klassen überschrieben werden, u.a..
Und nebenbei noch was dazu:
(php5)
Auch in PHP 4 kann man mit statischen Methoden arbeiten, auch wenn es das Schlüsselwort static nicht gibt.
class Klasse
{
function statischeMethode()
{
echo "Statische Methode aufgerufen.";
}
}
echo Klasse::statischeMethode();
Schöner Gruß,
rob
Hallo Robbe,
weil es sinnloser speicher bis zur beendung der methode ist, und bei folgenden schleifen kann das schon ne rolle spielen ausserdem ist es unschön.
Nein, es wird, wie ich bereits sagte, bei dieser Vorgehensweise praktisch kein zusätzlicher Speicher benötigt.
.. ist dir zuviel Code?
jap :)
zuviel code = weniger überblick -> das gilt immer.
Das würde ich so nicht sagen. Guck dir doch mal Perl-Programme an ;-)
Normalerweise bedeutet Code 'kürzer' schreiben, dass man mehrere Dinge in weniger Anweisungen zusmmenfasst. Es wird dadurch unter Umständen schwierigen, Schritt für Schritt nachzuvollziehen, was genau das Programm eigentlich tut.
Ob die von PHP verlangte Variable wirklich nötig ist, darüber lässt sich natürlich streiten. In anderen Sprache, wie z.B. Java geht es ja problemlos, direkt über den Methodenaufruf auf den Rückgabewert der Methode zuzugreifen.
das stimmt nich ganz. darüber hab ich mir jetzt auch ne krücke dafür die folgende aufrufschematas zulässt:
logger::init(__METHOD__)->info("logge dies & das..");
es handelt sich in diesem falle um ein kleines logging-framework, welches nur aufgerufen werden darf, wenn die infos über den aufrufer bekannt sind.
Ich halte das für wesentlich unübersichtlicher und unsauberer, als eine kleine Variable einzuführen. Insbesondere, da du ja anscheinend keine wirkliche statische Methode haben willst.
Schöne Grüße,
Johannes
Hi Johannes,
Nein, es wird, wie ich bereits sagte, bei dieser Vorgehensweise praktisch kein zusätzlicher Speicher benötigt.
hmm, das würde ich merkwürdig finden.. denn solange ich einen gültigen zeiger auf dieses objekt habe, kann es auch nicht zerstört werden. und man hat ja solange einen gültigen zeiger, solange ich auf das objekt im aktuellen kontext zugreifen kann.
Das würde ich so nicht sagen. Guck dir doch mal Perl-Programme an ;-) Normalerweise bedeutet Code 'kürzer' schreiben, dass man mehrere Dinge in weniger Anweisungen zusmmenfasst. Es wird dadurch unter Umständen schwierigen, Schritt für Schritt nachzuvollziehen, was genau das Programm eigentlich tut.
in diesem falle ist es ja so, das diese variable einfach überflüssig ist, da es in einem context auch in der regel nur einen aufruf geben wird.
Ich halte das für wesentlich unübersichtlicher und unsauberer, als eine kleine Variable einzuführen. Insbesondere, da du ja anscheinend keine wirkliche statische Methode haben willst.
ok, das ist wohl geschmackssache aber so hatte ich dies immer in anderen sprachen wunderbar anwenden können und wollte es halt hier nicht missen..
gruss,
robbe.
Hallo Robbe,
hmm, das würde ich merkwürdig finden.. denn solange ich einen gültigen zeiger auf dieses objekt habe, kann es auch nicht zerstört werden. und man hat ja solange einen gültigen zeiger, solange ich auf das objekt im aktuellen kontext zugreifen kann.
Im Notfall gibt es immer noch unset. Außer wenn eine Variable _sehr_ viel Speicher verbraucht, ist es normalerweise nicht notwendig, dies explizit aufzurufen.
Es ist ja gut, dass du dir Gedanken über den Resourcenverbrauch deiner Scripte machts, aber ich bezweifle, dass du den etwas längeren Verbrauch des Objektes im Speicher überhaupt merkst.
ok, das ist wohl geschmackssache aber so hatte ich dies immer in anderen sprachen wunderbar anwenden können und wollte es halt hier nicht missen..
»Das ist nun mal so.«
Ich habe mich allerdings auch schon öfters darüber geärgert, dass es nicht möglich ist, direkt über den Methodenaufruf auf einen Rückgabewert zugreifen zu können.
Schöne Grüße,
Johannes