Seite 1 von 1

Statische Klassenmethoden mit @-Operator aufrufen?

Verfasst: 16.04.2007 20:15
von S2B
Hallo,

eigentlich sagt der Titel schon alles: Ich möchte eine statische Klassenmethode mit dem @-Operator aufrufen, also die Fehler darin unterdrücken. Folgendes habe ich schon ausprobiert:

Code: Alles auswählen

@core::instance();

Code: Alles auswählen

core::@instance();
Habe ich da jetzt nur etwas übersehen oder ist das wirklich nicht so einfach?

Verfasst: 17.04.2007 14:55
von easygo
Nicht so einfach / versuchs mal mit eval() oder call_user_func() / als Beispiel

Code: Alles auswählen

$class = 'core';
$method = 'instance()';
$class::$method;

$return = call_user_func(array($class, $method));
Wichtig wär halt ein array als Name. easy

Verfasst: 17.04.2007 18:27
von S2B
Zuerst mal muss ich meinen ersten Beitrag korrigieren: Der gepostete Code lief ohne Probleme, nur gab es in meinem Fall Probleme, da die Funktion zusätzlich noch eine Referenz zurückgeben sollte, also so:

Code: Alles auswählen

$core =& @core::instance();
eval() dürfte daran auch nichts ändern, denn die Referenz brauche ich ja so oder so. Genausowenig hilft mir da call_user_func() weiter, da dort keine Referenz zurückgegeben werden kann. Sonst hätte ich gleich diese Funktion verwendet...

Ich werde mir jetzt wahrscheinlich mit einem zusätzlichen Parameter $no_errors der Methode instance() behelfen, da die Funktion selber sowieso keinen Fehler produzieren wird:

Code: Alles auswählen

public static function &instance($no_error)
{
  static $instance;

  if (!isset($instance))
  {
    $instance = ($no_error) ? @new core() : new core();
  }

  return $instance
}

Verfasst: 17.04.2007 18:51
von easygo
S2B hat geschrieben:eval() dürfte daran auch nichts ändern, denn die Referenz brauche ich ja so oder so. Genausowenig hilft mir da call_user_func() weiter, da dort keine Referenz zurückgegeben werden kann. Sonst hätte ich gleich diese Funktion verwendet...
Geht schon auch mit Übergabe eines Parameters (Referenz)

Code: Alles auswählen

call_user_func(array($class, $method), $parameter);
Aber keine Ursache btw. :roll: easy