mmofacts.com

Methoden von klassen verwenden ohne instanzen

gepostet vor 15 Jahre, 5 Monate von BlackScorp

Hi leute ich wollte mal fragen ob es möglich sei nur die klassen datei zu includen und deren methoden zu verwenden ohne eine instanz des objekts davor anzulegen. also in C++ ist es ja zb so ich inlude zb math.h und rufe dann nur die methode aus der header datei auf und schreibe nicht davor:

Math math = new Math();

math.pow(2,1);

sondern ich schreibe es ja nur so auf:

include

int ergebnis = pow(2,1);

nun habe ich mich halt gefragt ob es auch in php möglich sei. also dass ich statt

include "class.Foo.php";

$bar = new Foo();

return $bar->methode($irgendwas);

das schreiben kann:

include "class.Foo.php";

return methode($irgendwas);

Hoffe ihr versteht was ich meine:D

MFG

gepostet vor 15 Jahre, 5 Monate von BlackScorp

na das ist ja mal ein ding:D vielen dank nun kann ich packages anlegen. dankeschön

MFG

gepostet vor 15 Jahre, 5 Monate von knalli

Streng genommen war die Frage aber anders, und die Antwort darauf lautet: Nein, gibt es nicht. Du musst explizit den Scope der Klasse (also bspw. für einen statischen Aufruf) angeben. Das Einladen von Methoden/Funktionen einer Klasse in der Form wie bei C oder auch bei Java5 geht nicht.

gepostet vor 15 Jahre, 5 Monate von BlackScorp

naja mir ging es halt eben drum dass ich nicht für jede auch so weitere kleine klasse eine instanz anlegen muss sondern direkt nach dem includen die methoden der klasse verwenden kann also

klassenname::methode(parameter); ist eigentlich genau das was ich brauche

gepostet vor 15 Jahre, 5 Monate von Todi42

Du hast da, was den C++ Teil angeht, etwas falsch verstanden: pow() ist eine freie Funktion, gänzlich ohne Klasse und Objekt! (Jehowa!!!). Das macht besonders dann Sinn, wenn es z.B. um Algorithmen geht, wie z.B. pow() oder std::swap() oder sort() usw.

Freie Funktion:

void f();

Statische Funktion:

struct stat {

static void f()

} ;

Member-Function:

struct mem {

  void f() const;

} ;

f();

stat::f();

mem().f();

mfg Todi

gepostet vor 15 Jahre, 5 Monate von knalli

Musst du -- wenn du math nicht einbindest -- nicht auch math::pow() schreiben? Ebenso bei std, oder string, wo man den Code vereinfachen kann. Ob es eine echte Vereinfachung ist, sei mal dahingestellt.

Ist vielleicht falsch rübergekommen, meine Erfahrungen in C sind nie ordentlich gewachsen.. ich meinte schon den allgemeinen "Scope", nicht unbedingt auf eine Klasse bezogen,

gepostet vor 15 Jahre, 5 Monate von Todi42

Original von knalli

Musst du -- wenn du math nicht einbindest -- nicht auch math::pow() schreiben? Ebenso bei std, oder string, wo man den Code vereinfachen kann. Ob es eine echte Vereinfachung ist, sei mal dahingestellt.

Ist vielleicht falsch rübergekommen, meine Erfahrungen in C sind nie ordentlich gewachsen.. ich meinte schon den allgemeinen "Scope", nicht unbedingt auf eine Klasse bezogen,

Nö, wenn Du den header math.h einbindest, sind die Funktionen, genau, wie in C im globalen Namensraum und wenn Du den C++ header cmath einbindest, befinden sich die Namen in std. Also:

#include

pow(1.0, 1.0);

oder

#include

std::pow(1.0, 1.0);

gepostet vor 15 Jahre, 5 Monate von BlackScorp

Original von TheUndeadable

Wenn du C++ richtig programmieren möchtest, nutze cmath:

naja math.h zu benutzen ist aber nicht falsch;)

Auf diese Diskussion antworten