PHP Variabl in Function ausserhalb vefügbar machen?

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hi

Kurz:

PHP:
function getSong() {
 global $title; //ist gefüllt und wird in dieser Function verarbeitet.
 
   $song = substr($title, 0, strrpos($title, "(") -1 );
   $version = substr($title, 0, strrpos($title, ")") +1 );
  list($version, $temp) = split('\(', $version);
   $version = str_replace(")", "", $temp);
  list($title, $temp) = split('\)', $title);
   $year = trim($temp);
}

Mein Problem:
Wie stelle ich jetzt $song $version $year ausserhalb der Function zur Verfügung?

Mache ich ausserhalb das:

$song = ''; // wenn ich die nicht vorher setze gibt es eine NOTICE.
$song = getSong($song);

Nun ist $song gefüllt aber auch nur dann wenn ich in der Function
am Ende ein return $song; schreibe, ansonsten nicht.

Weshalb das ganze?
Ich habe 3 verschiedene $title Inhalte, um jetzt nicht alles 3 mal im Code schreiben zu müssen wollte ich das mit einer Funktion machen, doch irgendwie laufe ich hier gegen eine Mauer.

$title setze ich als global weil ich 3 verschiedene habe, die dann per IF verändert werden.

Wie also bekomme ich die 3 $variablen mit Inhalt aus der Function?
 
global (Edit: so wie du's ja auch mit $title machst... Wieso fragst du überhaupt noch!?)

Aber eigentlich würde ich die Werte stattdessen einfach als array zurückgeben.
 
Zuletzt bearbeitet:
gewöhn dir direkt mal globale Variablen ab...

Rückgabe als assoziatives Array wäre eine Möglichkeit
Ungetestet dieser Code:
PHP:
function getSong($title) {
  $result["song"] = substr($title, 0, strrpos($title, "(") -1 );
  $version = substr($title, 0, strrpos($title, ")") +1 );
  list($version, $temp) = split('\(', $version);
  $version = str_replace(")", "", $temp);
  list($title, $temp) = split('\)', $title);
  $result["year"] = trim($temp);

  $result["version"] = $version;
  return $result;
}  

$info = getSong($title);
echo $info["song"]."<br>";
echo $info["version"]."<br>";
echo $info["year"]."<br>";

Andere Möglichkeit wären Referenz-Parameter.

PHP:
function getSong($title, &$song, &$version, &$year) {
  $song = substr($title, 0, strrpos($title, "(") -1 );
  $version = substr($title, 0, strrpos($title, ")") +1 );
  list($version, $temp) = split('\(', $version);
  $version = str_replace(")", "", $temp);
  list($title, $temp) = split('\)', $title);
  $year = trim($temp);
}  

getSong($title, $song, $version, $year);
echo $song."<br>";
echo $version."<br>";
echo $year."<br>";
Nachteil hier ist, dass man beim Aufruf nicht sieht, dass es Referenzparameter sind. Eventuell müssen die Variablen auch vorher initialisiert werden, um Warnungen zu vermeiden...
 
Zuletzt bearbeitet:
Ja, eben. Und auch $title hat wohl keinen Grund global zu sein. Dafür gibts Parameter.
 
Die Array Sache gefällt mir gut....funktioniert auch .. danke

Wegen $title

$title wird ja in der Function auseinander genommen, wenn ich das auch in die Function packe, wie ändere ich von aussen dann den Inhalt von $title? steh irgendwie jetzt ganz aufm Schlauch. Weil der Inhalt kommt von aussen, dann nämlich müsste ich auch die externe Verbindung in die Function packen, die Frage ich aber im Script ab damit ich weiß was kommt.

$titel ist ein jSON String, sieht aussen so aus: $title = $obj_stm1->artist->title; das ganze rennt wie CronJob also von wegen globale Variable, ist ja jetzt nicht mehr dank 1668 ;)
 
Zuletzt bearbeitet:
So mal sehen ob ich dir jetzt auch helfen kann ;)

Also die Variante mit einem Array als return ist auf jeden Fall viel schöner als die mit globalen Variablen. Das hat ja 1668 schon beschrieben, und das läuft anscheinend ja schon.

$title übergibst du als Parameter an die Funktion getSong().
D.h. du kannst zB. folgendes machen
(mal grob in php)
PHP:
function getSong($title) {
//hier wird das ganze halt verarbeitet und am Ende ein Array zurückgegeben
return $array; //bzw. wie unten schon im andere Code benannt das Array namens "result", ist ja egal wie es nun heißt
}

//Jetzt hast du irgendeinen Song (hab mir die Funktion jetzt nicht genau angesehen, ich mach jetzt einfach mal einen Beispielstring
$gesuchter_song="Beispieltitel";
$gefundener_song=getSong($gesuchter_song);

//Jetzt kannst du auf das Array aus der Funktion über $gefundener_song zugreifen
echo 'Der Titel stammt aus dem Jahre '.$gefundener_song['year']

Alles ungetestet und nur schnell mitm Notebook geschrieben. Dürfte aber passen.

Ich hoffe ich habe dein Problem verstanden und helfen können.
 
Zuletzt bearbeitet: (yeahr ohne "h"^^)
Jao, das habe ich Dank @1668... verstanden.
Klar, viel besser als mit der globalen $var wobei das ja auch noch garnicht richtig funktioniert hat :)
 
Zurück
Oben