PHP-Syntax für das Ergebnis der Dereferenzierung

33

Hintergrund

In jeder anderen Programmiersprache, die ich regelmäßig verwende, ist es einfach, den Rückgabewert einer Funktion zu bearbeiten, ohne eine neue Variable zu deklarieren, die das Funktionsergebnis enthält.

In PHP scheint dies jedoch nicht so einfach zu sein:

example1 (Funktionsergebnis ist ein Array)

%Vor%

example2 (Funktionsergebnis ist ein Objekt)

%Vor%

Kann jemand vorschlagen, wie man das in PHP macht?

    
dreftymac 13.04.2009, 01:12
quelle

22 Antworten

20

Dies ist speziell Array-Dereferenzierung, die derzeit in PHP 5.3 nicht unterstützt wird, aber in der nächsten Version, 5.4, möglich sein sollte. In aktuellen PHP-Releases ist dagegen eine Objekt-Dereferenzierung möglich. Ich freue mich auch auf diese Funktionalität!

    
smassey 25.10.2011, 12:41
quelle
25

PHP kann nicht auf Array-Ergebnisse einer Funktion zugreifen. Manche Leute nennen das ein Problem, andere akzeptieren das einfach so, wie die Sprache entworfen wurde. Also macht PHP Sie unwesentliche Variablen erstellen, nur um die Daten zu extrahieren, die Sie brauchen.

Sie müssen also tun.

%Vor%     
Ólafur Waage 13.04.2009 01:14
quelle
17

Array Dereferenzierung ist ab PHP 5.4 möglich:

Beispiel ( Quelle ):

%Vor%

mit PHP 5.3 erhalten Sie

%Vor%

Ursprüngliche Antwort:

Dies wurde gefragt bereits vor . Die Antwort ist nein. Es ist nicht möglich.

Nach Zitat Andi Gutmans zu diesem Thema:

  

Dies ist eine bekannte Feature-Anforderung   wird aber in PHP 5.0 nicht unterstützt. ich   Ich kann dir nicht sagen, ob es jemals sein wird   unterstützt. Es erfordert einige Nachforschungen   und viele Gedanken.

Sie finden auch diese Anfrage eine Zahl der Zeiten in der PHP Bugtracker. Für technische Details empfehle ich den offiziellen RFC und / oder fragen Sie auf PHP Interna .

    
Gordon 22.11.2009 17:01
quelle
13

Nun, je nach Situation können Sie eine der folgenden Lösungen verwenden:

%Vor%

Oder Sie können bestimmte Werte aus dem zurückgegebenen Array mithilfe von list () :

abrufen %Vor%

Bearbeiten: Der Beispielcode für each () , den ich früher gab, war falsch. each () gibt ein Schlüssel / Wert-Paar zurück. Es könnte also einfacher sein, foreach () zu verwenden:

%Vor%     
Calvin 13.04.2009 02:36
quelle
7

Leider gibt es dazu keinen Weg, obwohl es in den meisten anderen Programmiersprachen ist.

Wenn Sie wirklich einen einzigen Liner machen wollten, könnten Sie eine Funktion namens a () erstellen und etwas wie

machen %Vor%

Aber ansonsten wird func () [1] in PHP nicht unterstützt.

    
Tyler Carter 25.07.2009 16:36
quelle
5

Wie andere bereits erwähnt haben, ist dies nicht möglich. Die Syntax von PHP erlaubt dies nicht. Ich habe jedoch einen Vorschlag, der das Problem aus der anderen Richtung anspricht.

Wenn Sie die getBarArray -Methode kontrollieren und Zugriff auf die PHP-Standardbibliothek haben (die auf vielen PHP 5.2.X-Hosts installiert ist und standardmäßig mit PHP 5.3 installiert wird), sollten Sie stattdessen ein ArrayObject zurückgeben ein natives PHP-Array / Sammlung. ArrayObjects haben eine offetGet -Methode, die zum Abrufen eines beliebigen Index verwendet werden kann, sodass Ihr Code etwa wie

aussieht %Vor%

Und wenn Sie jemals ein natives Array / eine systemeigene Sammlung benötigen, können Sie die Ergebnisse immer umsetzen.

%Vor%     
Alan Storm 25.07.2009 17:44
quelle
5

Schreiben Sie eine Wrapper-Funktion, die dasselbe bewirkt. Aufgrund der einfachen Typ-Casting von PHP kann dies ziemlich offen sein:

%Vor%     
Nolte 07.06.2009 10:23
quelle
5

Wenn Sie nur das erste Element im Array zurückgeben möchten, verwenden Sie die Funktion current ().

%Vor%

Ссылка

    
AntonioCS 31.07.2009 16:03
quelle
3

Eigentlich habe ich eine Bibliothek geschrieben, die solches Verhalten erlaubt:

Ссылка

Funktioniert mit allem: Funktionen, Methoden. Caches, also so schnell wie PHP selbst:)

    
Valentin Golev 01.11.2009 02:29
quelle
3

Sie können solche Ausdrücke in PHP nicht ketten, also müssen Sie das Ergebnis von array_test() in einer Variablen speichern.

Versuchen Sie Folgendes:

%Vor%     
ashrewdmint 17.02.2010 15:50
quelle
2

Sie könnten natürlich ein Objekt anstelle eines Arrays zurückgeben und auf diese Weise darauf zugreifen:

%Vor%

Aber ich habe keine Möglichkeit gefunden, dies mit einem Array zu tun: (

    
Pesse 20.11.2009 08:38
quelle
2

Meine übliche Lösung ist eine generische Funktion wie diese

%Vor%

und dann

%Vor%

als Bonus, dies vermeidet auch 'undefined index' Warnung, wenn Sie es nicht brauchen.

Aus Gründen, warum foo()[x] nicht funktioniert, ist die Antwort ziemlich unhöflich und wird hier nicht veröffentlicht. ;)

    
user187291 20.11.2009 09:44
quelle
2

Dies sind einige Möglichkeiten, Ihr Problem anzugehen.

Zuerst können Sie Variablen direkt benennen, wenn Sie ein Array von Variablen zurückgeben, die nicht Teil der Auflistung sind, aber jeweils unterschiedliche Bedeutung haben.

Zwei weitere Möglichkeiten sind das Zurückgeben des Ergebnisses, bei dem es sich um eine Sammlung von Werten handelt.

%Vor%     
ivanjovanovic 20.11.2009 20:31
quelle
2

Extrem Ghetto, aber es kann nur mit PHP gemacht werden. Dies nutzt eine Lambda-Funktion (die in PHP 5.3 eingeführt wurde). Sehe und staune (und, äh, erschrocken):

%Vor%

Die Längen, die wir durchlaufen müssen, um etwas so Schönes in den meisten anderen Sprachen zu tun.

Für die Aufzeichnung mache ich etwas, das dem ähnlich ist, was Nolte tut. Entschuldigung, wenn ich jemandem die Augen bluten ließ.

    
KyleFarris 16.02.2011 22:34
quelle
2

Nach weiterer Forschung glaube ich, dass die Antwort nein ist, eine temporäre Variable wie diese ist in der Tat die kanonische Methode, mit einem Array umzugehen, das von einer Funktion zurückgegeben wird.

Sieht so aus, als würde sich das ab PHP 5.4 ändern.

Auch diese Antwort war ursprünglich für diese Version der Frage:

So vermeiden Sie temporäre Variablen in PHP, wenn Sie ein Array verwenden, das von einer Funktion zurückgegeben wurde

    
dreeves 20.11.2009 08:23
quelle
2

Das ist zu weit hergeholt, aber wenn Sie wirklich brauchen, dass es in einer Zeile ist:

%Vor%     
Petruza 25.07.2009 16:56
quelle
1

Wenn es nur ästhetisch ist, dann funktioniert die Objektnotation, wenn Sie ein Objekt zurückgeben. Was die Speicherverwaltung angeht, wird keine temporäre Kopie, nur eine Änderung der Referenz, vorgenommen.

    
bucabay 20.11.2009 08:51
quelle
1

Kurze Antwort:

Ja. Es ist möglich, mit dem Rückgabewert einer Funktion in PHP zu arbeiten, solange das Funktionsergebnis und Ihre spezielle PHP-Version dies unterstützen.

Referenzbeispiel2:

%Vor%

Fälle:

  • Das Ergebnis der Funktion ist ein Array und Ihre PHP-Version ist neu genug
  • Das Funktionsergebnis ist ein Objekt und das gewünschte Objektmitglied ist erreichbar
dreftymac 03.04.2013 17:39
quelle
1

Es gibt drei Möglichkeiten, dasselbe zu tun:

  1. Wie Chacha102 sagt, verwenden Sie eine Funktion, um den Indexwert zurückzugeben:

    %Vor%

    Dann können Sie verwenden:

    %Vor%

    um das erste Element usw. zu erhalten.

  2. Ein fauler Weg mit current und array_slice:

    %Vor%
  3. Verwenden Sie dieselbe Funktion, um sowohl das Array als auch den Wert zurückzugeben:

    %Vor%

    Dann können Sie das gesamte Array und ein einzelnes Array-Element erhalten.

    %Vor%

    oder

    %Vor%
Andrés Morales 04.03.2011 16:35
quelle
1

Bisher in PHP 5.3 mussten Sie dies tun:

%Vor%

Ergebnis: 2

Ab PHP 5.4 ist es möglich, ein Array wie folgt zu dereferenzieren:

%Vor%

Ergebnis: 2

Ab PHP 5.5:

Sie können sogar clever werden:

%Vor%

Ergebnis: 2

Sie können dasselbe auch mit Strings machen. Es heißt String-Dereferenzierung:

%Vor%

Ergebnis: H

    
Robert Rocha 24.05.2017 21:51
quelle
0

Funktioniert das?

%Vor%

Können Sie sonst die Funktion getBarArray () posten? Ich verstehe nicht, warum das von dem, was du bisher gepostet hast, nicht funktionieren würde.

    
thedz 25.07.2009 16:35
quelle
0

Sie könnten Referenzen verwenden:

%Vor%

Auf diese Weise erstellen Sie nicht wirklich ein Duplikat des zurückgegebenen Arrays.

    
mattbasta 22.11.2009 15:41
quelle

Tags und Links