it-swarm.com.de

Wo ist die Klasse $ tableClass definiert?

Ich habe sehr wenig Wissen über Joomla Core und PHP. Um mit meiner Website besser umgehen zu können, versuche ich, einen kleinen Teil des Joomla-Kerns zu lesen. Wenn ich auf diese Funktion JTable:getInstance (Libararies\joomla\table\table.php line268) stoße, wird sie zurückgegeben

    return new $tableClass($db);

Um zu verstehen, was getInstance zurückgibt, muss ich wissen, wie dieses $tableClass Definiert ist. Deshalb habe ich es in allen PHP-Dateien auf meiner Website durchsucht, obwohl es viele Referenzen gibt, auch einige sogenannte 'definitions' as this page weist darauf hin, dass keine von ihnen das ist, wonach ich suche. Ich erwarte so etwas wie

class tableClass{...}

Darüber hinaus gibt es aus anderen PHP-Dateien diese Zeilen:

$row = JTable::getInstance('K2Item', 'Table');
$row->hit($id);

So wie es aussieht, sollte das, was von getInstance zurückgegeben wird, ein Objekt sein, das ein Mitglied hit() hat, also erwarte ich etwas wie

class tableClass{...
    function hit(){
    .....
    }
}

Aber diese Art von Code ist nirgendwo zu finden, also stecke ich hier fest und brauche definitiv Hilfe.

Einige meiner Gedanken: Ist $ tableClass wirklich eine Klasse? Ich stelle fest, dass es einen $ Hat, den alle anderen Klassen nicht haben? Wenn es keine Klasse ist, warum kann sie dann so aufgerufen werden new $tableClass? Ich muss diese Grundlagen wirklich verstehen, aber es ist schwierig, das Keyword $ Zu googeln.

5
shenkwen

$ tableClass ist eine Variable. Sie werden keine Klasse mit dem Namen "tableClass" finden. Es ist nur ein Platzhalter für den echten Klassennamen, der zu Beginn der Methode getInstance generiert wird.

Schauen Sie sich die Zeilen 268-272 an, in denen getInstance beginnt:

public static function getInstance($type, $prefix = 'JTable', $config = array())
{
    // Sanitize and prepare the table class name.
    $type       = preg_replace('/[^A-Z0-9_\.-]/i', '', $type);
    $tableClass = $prefix . ucfirst($type);

Die erste Zeile definiert, welche Parameter Sie später an getInstance übergeben können.

 $type    The type (name) of the JTable class to get an instance of.
 $prefix  An optional prefix for the table class name.
 $config  An optional array of configuration values for the JTable object.

Wenn Sie sich also das Beispiel ansehen, das Sie gegeben haben,

$row = JTable::getInstance('K2Item', 'Table');

"K2Item" ist der Name der JTable-Klasse ($ type) und "Table" ist das Präfix ($ prefix). [$ config wurde nicht gesetzt, da es nur optional ist und hier wahrscheinlich nicht benötigt wird]

Zeile 271 ($type = preg_replace('/[^A-Z0-9_\.-]/i', '', $type);) entfernt alle fehlerhaften Zeichen aus dem $ type-Parameter, dh alle Zeichen mit Ausnahme von Buchstaben (AZ), Zahlen (0-9) und den Zeichen "_", "." Und " - '. Dafür wird ein regulärer Ausdruck verwendet.

In Zeile 272 wird $ tableClass (der letzte Klassenname, um den sich gekümmert wird) generiert. Es nimmt das Präfix $ an und verkettet den Typ $ aus der vorherigen Zeile. ucfirst () konvertiert den ersten Buchstaben von $ type in Großbuchstaben.

Einige Beispiele:

JTable::getInstance('K2Item', 'Table');

$ tableClass wird zu "TableK2Item"

JTable::getInstance('C#!ont&ent');

$ tableClass wird aufgrund der Entfernung falscher Zeichen zu JTableContent und $ prefix ist standardmäßig "JTable".

6
fruppel