Start · Sprachen · PHP · Referenz · SolrObject

SolrObject

Klasse

Repräsentiert ein schreibgeschütztes Solr-Objekt, dessen Eigenschaften sowohl über Objekt- als auch über Array-Syntax zugänglich sind.

seit PHP 0.9.2 Kategorie: db

Signatur

class SolrObject implements ArrayAccess

Beschreibung

SolrObject ist eine Hilfsklasse der Solr-Erweiterung (PECL), die ein unveränderliches Datenobjekt kapselt. Instanzen dieser Klasse entstehen typischerweise als Teil von Solr-Antworten (z. B. innerhalb von SolrQueryResponse oder SolrUpdateResponse) und stellen die zurückgelieferten Felder und Metadaten strukturiert bereit.

Die Klasse implementiert das ArrayAccess-Interface, sodass auf Eigenschaften wahlweise über die Objekt-Syntax ($obj->feldname) oder die Array-Syntax ($obj['feldname']) zugegriffen werden kann. Beide Zugriffswege liefern dasselbe Ergebnis.

Alle Eigenschaften sind schreibgeschützt: Jeder Versuch, einen Wert zu setzen oder zu löschen (via offsetSet bzw. offsetUnset), löst eine SolrIllegalOperationException aus. Dies spiegelt die Natur von Solr-Antwortdaten wider, die nur gelesen, nicht verändert werden sollen.

Typischerweise wird SolrObject nicht manuell instanziiert, sondern als Rückgabewert von Solr-Antwort-Methoden empfangen. Die Klasse eignet sich daher gut für strukturiertes, sicheres Durchiterieren von Solr-Dokumentenfeldern und -Metadaten.

Parameter

Name Typ Default Beschreibung
$keine Der Konstruktor von SolrObject nimmt keine Parameter entgegen. Instanzen werden üblicherweise intern von der Solr-Erweiterung erstellt.

Beispiele

Zugriff auf Felder eines SolrObject via Objekt- und Array-Syntax

<?php
// Verbindung zu Solr aufbauen
$options = [
    'hostname' => 'localhost',
    'port'     => 8983,
    'path'     => '/solr/mycore',
];
$client = new SolrClient($options);

// Einfache Suche ausführen
$query = new SolrQuery('*:*');
$query->setRows(1);

$queryResponse = $client->query($query);
$response = $queryResponse->getResponse();

// $response ist ein SolrObject
// Zugriff über Objekt-Syntax
$status = $response->responseHeader->status;
echo 'Status (Objekt-Syntax): ' . $status . PHP_EOL;

// Zugriff über Array-Syntax
$qTime = $response['responseHeader']['QTime'];
echo 'QTime (Array-Syntax): ' . $qTime . ' ms' . PHP_EOL;

// Prüfen, ob ein Schlüssel existiert
if (isset($response['response'])) {
    echo 'Treffer gesamt: ' . $response['response']->numFound . PHP_EOL;
}
Status (Objekt-Syntax): 0 QTime (Array-Syntax): 2 ms Treffer gesamt: 42

Versuch, ein SolrObject zu beschreiben – führt zu einer Exception

<?php
$obj = new SolrObject();

try {
    // Schreibzugriff ist nicht erlaubt
    $obj['neuesFeld'] = 'wert';
} catch (SolrIllegalOperationException $e) {
    echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}

try {
    // Auch Löschen ist verboten
    unset($obj['irgendetwas']);
} catch (SolrIllegalOperationException $e) {
    echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
Fehler: This SolrObject is read-only and cannot be modified Fehler: This SolrObject is read-only and cannot be modified

// Wichtig · Fallstricke

Schreibschutz: Jeder schreibende Zugriff (Setzen oder Löschen von Eigenschaften) wirft eine SolrIllegalOperationException. Dies gilt sowohl für die Array-Syntax ($obj['key'] = ...) als auch für dynamische Objekteigenschaften.

PECL-Abhängigkeit: SolrObject ist Teil der PECL-Erweiterung solr und steht nicht im PHP-Kern zur Verfügung. Die Erweiterung muss separat installiert und in der php.ini aktiviert sein (extension=solr).

Iteration: Um alle Felder eines SolrObject zu durchlaufen, kann get_object_vars($obj) oder ein direktes foreach verwendet werden, sofern die Klasse intern IteratorAggregate implementiert – prüfe dies mit der installierten Version der Erweiterung.