Objekt in statischer Klasse nutzen

ThiKool

Erfahrenes Mitglied
Hi Leute ich habe folgendes Problem,

Ich initializiere ein Object und rufe dann eine eine Methode aus einer Statischen Klasse auf, die auch mit dem Objekt arbeiten soll.

Das klappt auch wenn ich das Objekt einfach per Parameter übergebe.

Allerdings spielt so meine IDE nicht mit und erkennt die Methoden des Objekts nicht mehr.

Habe ich irgendwas vergessen zu initialisieren oder sowas?

DAnke euch
 
Hi

also grundsätzlich funktioniert der Code, aber irgendein IDE-Feature (Autovervollständigung
von Methodennamen oder was) geht nicht? Das wäre dann wohl den Entwicklern zu melden.
Um welche IDE gehts denn?
 
So meinte ich das:

Datei 1:
Code:
$user= new User;

echo Test::getSomething($user);

Testklasse:

Code:
class Test
{
public static funktion getSomething($user)
{
return $user->getName();
}
}

und getName() wird mir als nicht vorhanden in der Klasse angezeigt.

Ja es funktioniert, allerdings stelle ich mir eben die Frage ob mein Vorgehen so richtig ist oder ich etwas zusätzlich angeben müsste.

Übergebe ich $user per Global funktionierts.
Wenn ich in jeder Methode ein neues Objekt erstelle funktionierts auch - aber das ist ja wohl nicht Sinn der Sache oder?

Ich probiere gerade die Testversion von PHPstorm aus.
 
Du gehst doch davon aus, dass jedes Objekt, dass Du an diese Methode übergibst, auch die Methode getName() definiert hat. Dann solltest Du dies entweder vorher überprüfen oder Du solltest ein Interface definieren, dass diese Vorgabe erzwingt. Wenn Du dieses in Deiner Klasse implementierst, dann kannst Du das Interface auch als Typehint angeben, womit Deine IDE auch weiß, welche Methoden das übergebene Objekt hat.
PHP:
interface NameInterface {
  public function getName();
}

class User implements NameInterface {
  public function getName() {
    # do something
   }
}

class Test {
  public static function getSomething( NameInterface $user ) {
    return $user->getName();
  }
}
 
Zuletzt bearbeitet:
Ahhh perfekt, das mit dem TypeHint klappt. Habs jetzt so gelöst:

Code:
class Test {
  public static function getSomething( User $user ) {
    return $user->getName();
  }
}
 

Neue Beiträge

Zurück