Warum muss ich das Ergebnis von PHP-end () Array-Funktion einer Variablen zuweisen auf das Ergebnis zu betreiben?

StackOverflow https://stackoverflow.com/questions/1633301

  •  06-07-2019
  •  | 
  •  

Frage

Ich habe versucht, den möglicherweise leer letzten Eintrag eines Arrays zu löschen, wie folgt, aber ich erhalte die Fehlermeldung: „Can not Funktion Rückgabewert im Schreibkontext verwenden“:

  if (empty(end($crontabEntryList))) {
    array_pop($crontabEntryList);
  }

Wenn ich das erste Ende des Rückgabewert einer Variablen zuweisen (wie unten) ich in der Lage bin, dass die letzten Eintrag zu löschen, wenn leer. Per die manuelle Eingabe für end () it „den Wert des letzten Elements zurückgibt oder FALSCH für leere Array .“ Durch googeln habe ich eine mögliche Erklärung : booleans sind nicht „beschreibbar“.

Doch dann scheint es, dass dieser Fehler zurückgegeben wird, in meinem spezifischen Kontext und möglicherweise andere hier dokumentierten auf SO , nur weil es möglich , dass ein boolean zurückgeführt werden könnte. Da das Array in meinem Fall entschieden war nicht leer, und daher eher als falsch, end () „gibt den Wert des letzten Elements“.

Sind meine Annahmen richtig? In diesem Fall ist dies nicht im Widerspruch zu der losen typisierte Art von PHP? Oder ist es, weil das letzte Element des Arrays ist „nicht beschreibbar“? In diesem Fall, was als eben "Schreibkontext" in PHP?

  $last = end($crontabEntryList);
  if (empty($last)) {
    array_pop($crontabEntryList);
  }
War es hilfreich?

Lösung

Das hat nichts mit end () oder "Beschreibbarkeit" von booleans zu tun.

empty() und isset() sind keine Funktionen, sie sind Sprachkonstrukte.

die Dokumentation für empty() :

  

Hinweis: empty () überprüft nur Variablen als   alles andere wird in einem Parse führen   Error. Mit anderen Worten, nach dem   wird nicht funktionieren. leer (trim ($ name))

Auch hier: nur Variablen können empty() weitergegeben werden

.

Andere Tipps

empty () ist seltsam ähnlich. Ich habe gerade gelernt, es zu akzeptieren und arbeiten um ihn herum, wo möglich (mit der Lösung, die Sie zur Verfügung gestellt).

Wenn Sie nur leere Werte aus einem Array zu löschen versuchen, versuchen, array_filter ()

Kann ich schlage vor, nur eine negative Kontrolle des Rückgabewert von Ende () verwenden? Wie ich sehe, end () gibt den Wert entweder des letzten Elements oder FALSCH, wenn leer. Anstatt also den zusätzlichen Code unter Verwendung eines anderen Variablen erstellen mit leeren zu testen, testen gerade die Rückkehr von end ():

/* Edited */
if(!(trim(end($crontabEntryList)))) {
   array_pop($crontabEntryList);
}

Ich habe dies mit einer Reihe von Strings auf meinem System getestet und es scheint, die gewünschte Wirkung zu haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top