Auf das PhpStorm-Feld wird über eine magische Methode zugegriffen

Lesezeit: 5 Minuten

Benutzer-Avatar
Knisternder Code

Ich habe die Datatables-Bibliothek in meinem CodeIgniter-Bibliotheksordner gezündet.

Etwas Code aus der Bibliothek

class Datatables
{
    /**
     * Global container variables for chained argument results
     *
     */
    protected $ci;
    protected $table;
    protected $distinct;
    protected $group_by;
    protected $select         = array();
    protected $joins          = array();
    protected $columns        = array();
    protected $where          = array();
    protected $filter         = array();
    protected $add_columns    = array();
    protected $edit_columns   = array();
    protected $unset_columns  = array();

    /**
     * Copies an instance of CI
     */
    public function __construct()
    {
        $this->ci =& get_instance();
    }

Dann habe ich die Bibliothek in model aufgerufen

class Common_Model extends MY_Model{

    function __construct(){
        parent::__construct();
        $this->load->library('Datatables.php');
    }

dann habe ich versucht, die Bibliotheksfunktionen aufzurufen

function select_fields_joined_DT($data, $PTable, $joins="", $where="", $addColumn = '',$unsetColumn='')
{
    /**
     *
     */
    $this->datatables->select($data);
    if ($unsetColumn != '') {
        unset_column($unsetColumn);
    }
        $this->datatables->from($PTable);
    if ($joins != '') {
        foreach ($joins as $k => $v) {
            //$this->datatables->join($v['table'], $v['condition'], $v['type']);
        }
    }

    if ($addColumn != '') {
        $this->datatables->add_column("Actions", $addColumn);
    }

    $result = $this->datatables->generate();
    return $result;
}

und alles funktioniert gut, außer dass der phpstorm mir diesen Fehler anzeigt:

Field Accessed via magic method

Geben Sie hier die Bildbeschreibung ein

Ich habe versucht, diesen Fehler mit Dokumentkommentaren zu beheben, kann aber nicht herausfinden, wie ich das tun kann. Jede Hilfe wird geschätzt.

  • Sie müssen sie per deklarieren @property im PHPDoc-Kommentar, der zu dieser Klasse gehört.

    – LazyOne

    30. August 2014 um 9:33 Uhr

  • Gibt es eine Möglichkeit, dies zu tun, ohne die Datei zu berühren, in der die Klasse deklariert ist? Zum Beispiel, wenn die Klasse Teil einer Bibliothek eines Drittanbieters ist und ich keine benutzerdefinierten Patches für diesen Code erstellen möchte, nur um diese hinzuzufügen @property Kommentare?

    – Enno

    3. Juli 2019 um 9:43 Uhr

  • @Enno Hast du eine Antwort auf deine Frage gefunden? Ich habe auch das gleiche Problem wie du. Die einzige Möglichkeit, die mir einfällt, besteht darin, eine Klasse zu erstellen, die die Klasse eines Drittanbieters erweitert, und dann die hinzuzufügen @property? Bin mir aber nicht sicher ob es klappt.

    – markandrewkato

    9. Juni 2020 um 13:50 Uhr

  • @markandrewkato Ich denke, es hängt sehr von deiner Situation ab, ob du die Klasse verlängern kannst oder nicht. In meinem Fall war das nicht möglich, und ehrlich gesagt weiß ich nicht mehr, was ich getan habe.

    – Enno

    10. Juni 2020 um 12:32 Uhr

  • @Enno Kein Problem. Da ich kein Dokument zu einem Drittanbieter hinzufügen kann und auch nicht verlängern möchte, habe ich einfach die Antwort unten befolgt. Vielen Dank!

    – markandrewkato

    11. Juni 2020 um 16:17 Uhr

Benutzer-Avatar
Christian

Bearbeiten: Nur weil ich dafür immer wieder Upvotes bekomme, möchte ich dieser Antwort eine Einschränkung voranstellen. Ich habe ein altes Projekt geerbt, an dem ich weder langfristig arbeiten noch dafür bezahlt werden würde, alles richtig abzutippen. Ich halte das Folgende für eine nukleare Option und würde dies nur unter ähnlichen Bedingungen tun. Wenn dies ein Projekt ist, das Sie besitzen oder mit dem Sie zumindest lange arbeiten werden, insbesondere in der modernen PHP 7/8-Ära und darüber hinaus, tun Sie dies bitte nicht und räumen Sie Ihren Code stattdessen mit tatsächlichen Typen oder zumindest einem docblock auf: ) Ursprüngliche Antwort folgt unten.

Wenn Sie dies ohne Dokumentkommentare entfernen möchten, können Sie das Kontrollkästchen deaktivieren Benachrichtigen Sie über den Zugriff auf eine Immobilie über eine magische Methode die darin zu finden ist

Projekt Einstellungen > Inspektionen > PHP > Nicht definiert > Undefiniertes Eigentum

Benachrichtigen Sie über den Zugriff auf ein Feld über die magische Methode

Screenshot der PhpStorm-Einstellungen

  • Ich bin mir nicht sicher, ob ich lachen oder weinen soll. Ich bin kürzlich von Idea zu eigenständigem phpstorm gewechselt, und da ich dieses Problem erneut habe, habe ich diese Benachrichtigung gegoogelt, um diese SO-Frage zu finden. Ich mochte die positiv bewertete Antwort nicht und fand, dass der Kommentar von @LazyOne das war, wonach ich gesucht hatte. Dann wurde mir klar, dass diese Antwort von mir war …

    – Christian

    3. April 2017 um 11:53 Uhr


  • Ich habe den Kommentar von LazyOne zu einer Community-Antwort gemacht. Fühlen Sie sich frei, die Informationen zu ergänzen oder zu korrigieren.

    – Emil Bergeron

    11. April 2017 um 17:19 Uhr

  • Gut erledigt. Ich stehe jetzt vor diesem Problem. Ich bin natürlich ein wenig an PyCharm mit Python-Beziehungen gewöhnt. Ich bin neu bei PhpStorm. Es war einfach, diese Route herauszufinden und Undefinierte Eigenschaft zu deaktivieren. Das ist gut, denn während ich mit Laravel arbeite … passiert das ständig! Vielen Dank!

    – Bitart

    13. Juni 2021 um 13:41 Uhr

  • @Bitart check out github.com/barryvdh/laravel-ide-helper Damit stoße ich nicht mehr auf Undefiniertes

    – Christian

    14. Juni 2021 um 16:18 Uhr

  • Ich konnte einfach nicht anders, als über Chrisans Kommentar zu lachen.

    – Jasonfisch

    31. Oktober 2021 um 14:18 Uhr

Wie von erwähnt LazyOne in den Fragekommentaren:

Sie müssen sie per deklarieren @property im PHPDoc-Kommentar, der zu dieser Klasse gehört.

/**
 * @property string $bar
 */
class Foo {

    public function __get($name) {
        if ($name == 'bar') {
            return 'bar';
        }
        return NULL;
    }
}

Ausschnitt aus dem Artikel von Dmitry Dulepov “Schneller Tipp: magische Methoden und PhpStorm”.

  • Der Link zum Artikel ist nicht mehr gültig.

    – CraigLondon

    13. November 2017 um 13:33 Uhr

  • @CraigLondon Der Artikel wird nicht benötigt, da alles in der Antwort enthalten ist und der Link nur als Quelle angegeben wurde. Trotzdem habe ich es mit a aktualisiert Wayback-Maschine Snapshot-Link.

    – Emil Bergeron

    13. November 2017 um 16:42 Uhr

  • Ich mag das ehrlich gesagt viel mehr als die gewählte Antwort. Es gibt eine Möglichkeit, explizit zu sagen, was wir von einer Klasse erwarten können, anstatt alles der Magie und möglichen Tippfehlern zu überlassen

    – Chris

    25. November 2018 um 11:50 Uhr


Wenn Sie die Inspektion nicht für das gesamte Projekt deaktivieren möchten und die Klassendatei nicht ändern können, um eine @property -Tag, so unterdrücken Sie die Warnung an der Stelle, an der sie verwendet wird:

/** @noinspection PhpUndefinedFieldInspection */

Fügen Sie es einfach in einer neuen Zeile direkt vor der Zeile hinzu, in der das magische Feld verwendet wird.

Die Antwort von @christian ist immer noch gültig, aber der Pfad zum Deaktivieren der Inspektion wurde kürzlich geändert.

Hier ist der Neue:

Preferences > Editor > Inspections > PHP > Undefined Symbols > Undefied property

Deaktivieren Sie dann die Option “Zugriff auf eine Eigenschaft über magische Methode benachrichtigen”.

1342860cookie-checkAuf das PhpStorm-Feld wird über eine magische Methode zugegriffen

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

Privacy policy