Return gibt nichts zurück
DiamondDog
- php
1 Malcolm Beck´s0 DiamondDog0 Malcolm Beck´s0 dave0 DiamondDog2 dave
0 dave
Hallo Leute,
ich hab eine kleines Problem und zwar gibt mir meine function per return keinen Wert zurück, nehm ich aber echo anstellevon return werden die Werte ausgegeben.
So sieht mein Script aus:~~~php
function check_ttf_size($Schriftgröße, $Rotation, $ttf, $text, $Image_Width, $Image_Height) {
$textbox = calculateTextBox($Schriftgröße, $Rotation, $ttf, $text);
if(($textbox["width"] < $Image_Width) and ($textbox["height"] < $Image_Height)){
check_ttf_size($Schriftgröße + 1, $Rotation, $ttf, $text, $Image_Width, $Image_Height);
}else{
return $Schriftgröße - 1;
}
}
$ttf = $_SERVER['DOCUMENT_ROOT']."/xyz/abc/Fixedsys.ttf";
$Schriftgröße = 20;
$Rotation = 45;
$text = ucfirst(str_replace("www.", "", $_SERVER['HTTP_HOST']));
echo check_ttf_size($Schriftgröße , $Rotation, $ttf, $text, $Image_Width, $Image_Height);
Weiß jemand vll wo das Problem liegt und kann mir sagen wie ich das beheben kann?
Danke schon mal an alle.
Mfg Dog
مرحبا
function check_ttf_size($Schriftgröße, $Rotation, $ttf, $text, $Image_Width, $Image_Height) {
$textbox = calculateTextBox($Schriftgröße, $Rotation, $ttf, $text);
^^
if(($textbox["width"] < $Image_Width) and ($textbox["height"] < $Image_Height)){
check_ttf_size($Schriftgröße + 1, $Rotation, $ttf, $text, $Image_Width, $Image_Height);
return?
}else{
return $Schriftgröße - 1;
}
}
Das fällt mir gleich auf dem ersten Blick auf.
mfg
مرحبا
function check_ttf_size($Schriftgröße, $Rotation, $ttf, $text, $Image_Width, $Image_Height) {
$textbox = calculateTextBox($Schriftgröße, $Rotation, $ttf, $text);
^^
if(($textbox["width"] < $Image_Width) and ($textbox["height"] < $Image_Height)){
check_ttf_size($Schriftgröße + 1, $Rotation, $ttf, $text, $Image_Width, $Image_Height);
return?
}else{
return $Schriftgröße - 1;
}
}Das fällt mir gleich auf dem ersten Blick auf.
Aber an der Stelle brauch ich doch kein return oder? Weil ich die function doch erneut aufrufe, mit einer erhöhten Schriftgröße.
Oder seh ich da was falsch?
مرحبا
Aber an der Stelle brauch ich doch kein return oder? Weil ich die function doch erneut aufrufe, mit einer erhöhten Schriftgröße.
Das wird in deiner Funktion ja nicht berücksichtigt.
Deine If-Else bedingung gibt dir entweder einen Wert zurück, oder erhöht den Wert, allerdings ohne Rückgabe.
mfg
Hi,
Oder seh ich da was falsch?
Ja, tust du.
echo check_ttf_size()
Gibt aus was die funktion zurück gibt.
check_ttf_size gibt entweder direkt etwas zurück, oder ruft sich selbst nochmal auf.
Die aufgerufene Funktion macht wieder das Gleiche.
im programm wird echo check_ttf_size() aufgerufen
|-> ruft check_ttf_size auf
| |-> gibt einen Wert zurück
|-> erhält den wert und macht nichts weiter (keine rückgabe)
check_ttf_size hat nichts zurück gegeben, echo gibt also auch nichts aus.
Um Rekursion zu verstehen musst du zu aller erst Rekursion verstehen.
(auch wenn ich heute immer zu langsam zu sein scheine schicke ich das hier noch ab :P)
~dave
Ok hab alles verstanden und die Lösung gefunden:
function check_ttf_size($size) {
global $Rotation, $ttf, $text, $Image_Width, $Image_Height;
$textbox = calculateTextBox($size, $Rotation, $ttf, $text);
if(($textbox["width"] < $Image_Width) and ($textbox["height"] < $Image_Height))
return false;
else
return true;
}
$ttf = $_SERVER['DOCUMENT_ROOT']."/xyz/abc/Fixedsys.ttf";
$Schriftgröße = 20;
$Rotation = 45;
$text = ucfirst(str_replace("www.", "", $_SERVER['HTTP_HOST']));
while(check_ttf_size($Schriftgröße) == false){
$Schriftgröße ++;
}
echo $Schriftgröße;
Hi,
Ok hab alles verstanden und die Lösung gefunden:
ganz offensichtlich nicht.
Anstelle von
function check_ttf_size($Schriftgröße, $Rotation, $ttf, $text, $Image_Width, $Image_Height) {
$textbox = calculateTextBox($Schriftgröße, $Rotation, $ttf, $text);
if(($textbox["width"] < $Image_Width) and ($textbox["height"] < $Image_Height)){
check_ttf_size($Schriftgröße + 1, $Rotation, $ttf, $text, $Image_Width, $Image_Height);
}else{
return $Schriftgröße - 1;
}
}
einfach das hier
function check_ttf_size($Schriftgröße, $Rotation, $ttf, $text, $Image_Width, $Image_Height) {
$textbox = calculateTextBox($Schriftgröße, $Rotation, $ttf, $text);
if(($textbox["width"] < $Image_Width) and ($textbox["height"] < $Image_Height)){
return check_ttf_size($Schriftgröße + 1, $Rotation, $ttf, $text, $Image_Width, $Image_Height);
}else{
return $Schriftgröße - 1;
}
}
~dave
Hi,
if(($textbox["width"] < $Image_Width) and ($textbox["height"] < $Image_Height)){
Wenn diese Bedingung zutrifft
check_ttf_size($Schriftgröße + 1, $Rotation, $ttf, $text, $Image_Width, $Image_Height);
Gibst du nichts zurück (kein return).
echo check_ttf_size($Schriftgröße , $Rotation, $ttf, $text, $Image_Width, $Image_Height);
Deshalb gibt echo hier vermutlich auch nichts aus.
~dave