Eine direkte Antwort ohne Erklärung befindet sich am Ende dieses Posts.
Obgleich du dich im Umgang mit dem MVC-Pattern bereits sicher fühlst, erlaube mir kurz zu zitieren:
Die Pseudovariable $this ist verfügbar, falls eine Methode aus einem Objektkontext heraus aufgerufen wird. $this ist eine Referenz auf das aufrufende Objekt (üblicherweise das Objekt, zu dem die Methode gehört, aber möglicherweise ein anderes Objekt, falls die Methode statisch aus dem Kontext eines zusätzlichen Objektes aufgerufen wird).
Quelle: http://www.php.net/manual/de/language.oop5.basic.php
$this steht also innerhalb der Klasse fuer das instanziierte Objekt wobei mit $this->FUNCTIONNAME(); oder $this->VARNAME; auf Member Funktionen und Variablen zugegriffen werden kann. $this->get(); ist eine solche Funktion.
Wenn wir jetzt noch ein Stück weiter ausholen:
Jede eigene View Klasse ist von JView abgeleitet und erbt somit (bei entsprechender Sichtbarkeit) alle Methoden und Variablen. Im Vorfeld wurde der View bereits ein Standard Model bereitgestellt, bzw. die View weiß wo sie entsprechend zugewiesene Model findet.
$this->get(); wird in der Api-Dokumentation folgendermaßen beschrieben:
get (line 344)
Method to get data from a registered model or a property of the view
* return: The return value of the method
* access: public
mixed &get (string $property, [string $default = null])
* string $property: The name of the method to call on the model, or the property to get
* string $default: The name of the model to reference, or the default value [optional]
Schauen wir uns dazu die Funktion genauer an:
PHP-Code:
/**
* Method to get data from a registered model or a property of the view
*
* @access public
* @param string The name of the method to call on the model, or the property to get
* @param string The name of the model to reference, or the default value [optional]
* @return mixed The return value of the method
*/
function &get( $property, $default = null )
{
// If $model is null we use the default model
if (is_null($default)) {
$model = $this->_defaultModel;
} else {
$model = strtolower( $default );
}
// First check to make sure the model requested exists
if (isset( $this->_models[$model] ))
{
// Model exists, lets build the method name
$method = 'get'.ucfirst($property);
// Does the method exist?
if (method_exists($this->_models[$model], $method))
{
// The method exists, lets call it and return what we get
$result = $this->_models[$model]->$method();
return $result;
}
}
// degrade to JObject::get
$result = parent::get( $property, $default );
return $result;
}
Was heißt das nun? Die $this->get(); Funktion sucht im Model nach einer Funktion mit dem Namen der als Parameter übergeben wurde. Oft wird hier $this->get('Data'); benutzt was nichts anderes macht als im Model getData() aufzurufen sofern dort die Funktion existiert.
Dieser Funktion kann über einen so erfolgten Aufruf allerdings kein Parameter übergeben werden. Um das möglich zu machen, oder gegebenenfalls auf andere Funktionen als der aus dem Standard Model zuzugreifen, holt man sich das Model mit $this->getModel(); bzw. $this->getModel('NAME'); und kann dann wie gewohnt die gleichen Funktionen direkt und mit oder ohne Parameter aufrufen.
Beispiel: $model->getData(); | $model->getData($filter);
In welchen Fällen es nötig ist vorher das Model zu holen, hängt davon ab ob Funktionen verteilt über verschiedene Model, oder vielleicht sogar ein globales Model abgerufen werden. Man könnte an dieser Stelle pingelig sein und sagen, dass Parameter im Controller dem Model State zugewiesen werden sollten, anstatt intern über den Contructor oder der View aber ... keine der Core Komponenten hält sich strickt daran also, ... who cares most?
Ich hoffe der Ausflug war nicht zu weit und bringt ein wenig Klarheit, vielleicht auch für andere Suchende.
Direkte Antwort:
Da jede View von der JView erbt, kannst du sowohl im Front- als auch Im Backend mit $this->get(); ($this->get('AutoList')) auf die Funktionen zugreifen ohne vorher das Model holen zu müssen.
Lesezeichen