Statische Klassenmethoden mit @-Operator aufrufen?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Statische Klassenmethoden mit @-Operator aufrufen?

Beitrag 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?
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag 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
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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
}
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag 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
Antworten

Zurück zu „Coding & Technik“