Aufruf einer Member-Funktion für ein Nicht-Objekt [duplicate]

Lesezeit: 4 Minuten

Aufruf einer Member Funktion fur ein Nicht Objekt duplicate
Scott Gotttreu

Also überarbeite ich meinen Code, um mehr OOP zu implementieren. Ich habe eine Klasse eingerichtet, um Seitenattribute zu speichern.

class PageAtrributes 
{
  private $db_connection;
  private $page_title;

    public function __construct($db_connection) 
    {
        $this->db_connection = $db_connection;
        $this->page_title="";
    }

    public function get_page_title()
    {
        return $this->page_title;
    }

    public function set_page_title($page_title)
    {
        $this->page_title = $page_title;
    }
}

Später rufe ich die Funktion set_page_title() so auf

function page_properties($objPortal) {    
    $objPage->set_page_title($myrow['title']);
}

Dabei erhalte ich die Fehlermeldung:

Aufruf einer Member-Funktion set_page_title() für ein Nicht-Objekt

Was fehlt mir also?

  • Dieses objPage verweist nicht auf eine Instanz des PageAtrributes-Objekts (oder überhaupt eines Objekts). Probieren Sie einen var_dump in der vorherigen Zeile aus, um zu sehen, was es tatsächlich ist.

    – Adam Wright

    10. September 2008 um 16:20 Uhr

  • Erstellen Sie erstens eine Instanz der Klasse, zweitens definieren Sie sie wie folgt: $new_instance = new Class(); dann leiten Sie es zu Ihrer Methode wie: $new_instance->set_page_title(‘MyNewTitle’);

    – Jurijs Nesterovs

    3. Juni 2013 um 14:00 Uhr

Aufruf einer Member Funktion fur ein Nicht Objekt duplicate
Allain Lalonde

Das bedeutet es $objPage ist keine Instanz eines Objekts. Können wir den Code sehen, mit dem Sie die Variable initialisiert haben?

Da Sie einen bestimmten Objekttyp erwarten, können Sie auch darauf zurückgreifen PHPs Type-Hinting-FunktionDokumente um den Fehler zu erhalten, wenn Ihre Logik verletzt wird:

function page_properties(PageAtrributes $objPortal) {    
    ...
    $objPage->set_page_title($myrow['title']);
}

Diese Funktion akzeptiert nur PageAtrributes für den ersten Parameter.

1647066247 987 Aufruf einer Member Funktion fur ein Nicht Objekt duplicate
David Urry

Es gibt eine einfache Möglichkeit, diesen Fehler zu erzeugen:

    $joe = null;
    $joe->anything();

Wird den Fehler rendern:

Schwerwiegender Fehler: Aufruf einer Member-Funktion anything() auf einem Nicht-Objekt in /Applications/XAMPP/xamppfiles/htdocs/casMail/dao/server.php in Zeile 23

Es wäre viel besser, wenn PHP würde nur sagen,

Schwerwiegender Fehler: Anruf von Joe ist nicht definiert, weil (a) Joe null ist oder (b) Joe nicht definiert anything() in Zeile <##>.

Normalerweise haben Sie Ihre Klasse so aufgebaut $joe ist nicht im Konstruktor definiert oder

  • Na und, ich habe heute danach gesucht. Was David über die Reproduktion dieses Fehlers geschrieben hat, bestätigte meine Vermutung, die ich sonst testen müsste. 🙂

    – oli.G

    18. Juli 2013 um 12:16 Uhr

  • Danke David für die Erklärung. Dies ist für mich hilfreicher als die obige Antwort, da es die Dinge in einfacherer Sprache erklärt, sodass ich die Dinge selbst weiter untersuchen kann, anstatt einen neuen Thread mit demselben Problem erstellen zu müssen, da die obige Antwort mir immer noch keine Hilfe ist .

    – Andrew-ThinkUp

    18. Januar 2017 um 21:29 Uhr

Aufruf einer Member Funktion fur ein Nicht Objekt duplicate
Dipolmoment

Entweder $objPage ist keine Instanzvariable ODER Sie überschreiben $objPage mit etwas, das keine Instanz der Klasse ist PageAttributes.

function page_properties($objPortal) {    
    $objPage->set_page_title($myrow['title']);
}

sieht aus wie unterschiedliche Namen der Variablen $objPortal vs $objPage

1647066248 626 Aufruf einer Member Funktion fur ein Nicht Objekt duplicate
Steve Breese

Ich empfehle die akzeptierte Antwort oben. Wenn Sie jedoch in Not sind, können Sie das Objekt innerhalb von als global deklarieren Seiteneigenschaften Funktion.

$objPage = new PageAtrributes;

function page_properties() {
    global $objPage;
    $objPage->set_page_title($myrow['title']);
}

  • Ich wusste es erst heute… OMG. Ganz anders bei Java.

    – Gumuruh

    19. März 2012 um 10:13 Uhr

  • ja … das hatte ich auch vergessen

    – Mirko

    7. November 2012 um 11:59 Uhr

  • -1: das ist das Schlechteste mögliche Lösung

    – teresko

    25. November 2012 um 19:58 Uhr

  • @tereško, könnten Sie erläutern, warum dies eine schlechte Praxis ist?

    – Matt Clark

    28. Mai 2014 um 1:36 Uhr

  • @MattClark, weil es sich auf die Verwendung des globalen Zustands bezieht.

    – teresko

    28. Mai 2014 um 4:17 Uhr

Aufruf einer Member Funktion fur ein Nicht Objekt duplicate
Scott Gotttreu

Mir wurde klar, dass ich nicht bestand $objSeite hinein page_properties(). Es funktioniert jetzt gut.

  • Ich wusste es erst heute… OMG. Ganz anders bei Java.

    – Gumuruh

    19. März 2012 um 10:13 Uhr

  • ja … das hatte ich auch vergessen

    – Mirko

    7. November 2012 um 11:59 Uhr

  • -1: das ist das Schlechteste mögliche Lösung

    – teresko

    25. November 2012 um 19:58 Uhr

  • @tereško, könnten Sie erläutern, warum dies eine schlechte Praxis ist?

    – Matt Clark

    28. Mai 2014 um 1:36 Uhr

  • @MattClark, weil es sich auf die Verwendung des globalen Zustands bezieht.

    – teresko

    28. Mai 2014 um 4:17 Uhr

1647066249 717 Aufruf einer Member Funktion fur ein Nicht Objekt duplicate
Ahmad

Sie können ‘use’ in der Funktion wie im folgenden Beispiel verwenden

function page_properties($objPortal) use($objPage){    
    $objPage->set_page_title($myrow['title']);
}

992900cookie-checkAufruf einer Member-Funktion für ein Nicht-Objekt [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy