2009-11-24 7 views
6

ich diese Funktion haben, die Variablen deklariert:machen Variablen außerhalb der Funktion in PHP verfügbar?

function imageSize($name, $nr, $category){ 
    $path = 'ad_images/'.$category.'/'.$name.'.jpg'; 
    $path_thumb = 'ad_images/'.$category.'/thumbs/'.$name.'.jpg'; 
    list($width, $height) = getimagesize($path); 
    list($thumb_width, $thumb_height) = getimagesize($path_thumb); 
     ${'thumb_image_' . $nr . '_width'} = $thumb_width; 
     ${'thumb_image_' . $nr . '_height'} = $thumb_height; 
     ${'image_' . $nr . '_width'} = $width; 
     ${'image_' . $nr . '_height'} = $height; 
} 

Als ich das Echo:

echo $image_1_width 

Es funktioniert gut, aber wenn ich es außerhalb der Funktion zu tun erkennen, es wird nicht die Variable, wie kann ich mach sie irgendwie "global"?

Dank

Antwort

13

Ich würde dringend empfehlen NICHT mit globalen.

Was wird wahrscheinlich am besten für Sie ist aus der Funktion zurück:

function imageSize($name, $nr, $category){ 
    $path = 'ad_images/'.$category.'/'.$name.'.jpg'; 
    $path_thumb = 'ad_images/'.$category.'/thumbs/'.$name.'.jpg'; 
    list($width, $height) = getimagesize($path); 
    list($thumb_width, $thumb_height) = getimagesize($path_thumb); 
     ${'thumb_image_' . $nr . '_width'} = $thumb_width; 
     ${'thumb_image_' . $nr . '_height'} = $thumb_height; 
     ${'image_' . $nr . '_width'} = $width; 
     ${'image_' . $nr . '_height'} = $height; 

    $myarr = array(); 
    $myarr['thumb_image_' . $nr . '_width'] = $thumb_width; 
    $myarr['thumb_image_' . $nr . '_height'] = $thumb_height; 
    $myarr['image_image_' . $nr . '_width'] = $width; 
    $myarr['image_image_' . $nr . '_height'] = $height; 
    return $myarr; 

} 

$myImage = imageSize($name, $nr, $category);

dann greifen Sie auf jeden var:

echo $myImage['thumb_image_1_width']; 
echo $myImage['thumb_image_1_height']; 
echo $myImage['image_1_weight']; 
echo $myImage['image_1_height']; 

usw.

8

Sie müssen sie außerhalb der Funktion definieren. Und innerhalb der Funktion die globale Schlüsselwort verwenden, bevor Sie sie verwenden:

$someVar = null; 

function SomeFunc() { 
    global $someVar; 
    // change $someVar 
} 

// somewhere later 
SomeFunc(); 
echo $someVar; 

allerdings darauf hingewiesen werden, dass dies ein wirklich schlechtes Design Wahl!

+4

Einverstanden. Ich würde empfehlen, dass die Funktion diese Werte als ein Array zurückgibt, anstatt Globals zu verwenden. –

+0

Warum ist es schlecht? geben Sie mir auch einige Argumente ... –

+3

Wenn Sie Globals verwenden, wissen Sie nie wann und wer sie ändert und es bricht den Fluss des Codes. Sehen Sie sich einige der Vorschläge in anderen Antworten an, um Hinweise zu erhalten, wie Sie Ihre Funktion umschreiben können (Hinweis: Geben Sie das Zeug zurück, das Sie benötigen) –

-1
$var = 4; 

function bla() 
{ 
    global $var; 
    return $var; 
} 

Es wird 4 zurückkehren, da die Variable global ist. Hoffe, das ist was du willst.

+1

Rückkehr unterscheidet sich erheblich von Echo. – davethegr8

0

Rückkehr der Wert innerhalb der Funktion anstelle der Globals

1

Es klingt, als ob Sie lieber eine Klasse als eine Funktion implementieren möchten. Etwas wie:

Natürlich müssen Sie bei dieser Art von Konstruktion Variablennamen nicht zusammenkleben. Sie können einfach $image->width haben.

2

Sie könnten auch ein Array oder ein Objekt erstellen und dann das zurückgeben - z.

$dimensions[$nr] = imageSize($name,$category); 
echo "Thumb width " . $dimensions[$nr]['thumb_width']; 

Dann in der Funktion selbst

function imageSize($name, $category) 
{ 
    $path = 'ad_images/'.$category.'/'.$name.'.jpg'; 
    $path_thumb = 'ad_images/'.$category.'/thumbs/'.$name.'.jpg'; 
    list($width, $height) = getimagesize($path); 
    list($thumb_width, $thumb_height) = getimagesize($path_thumb); 

    $rsvp = Array(); 
    $rsvp['thumb_width'] = $thumb_width; 
    $rsvp['thumb_height'] = $thumb_height; 
    $rsvp['image_width'] = $width; 
    $rsvp['image_height'] = $height; 

    return $rsvp; 
} 
1

Ich zweite @ Lizard Antwort. Es hört sich auch so an, als würde man auf variable scope ein wenig lesen. (Hinweis, dieser Link enthält eine Erklärung, wie globale Variablen zu verwenden. Wie viele hier gesagt haben, das ist nicht der beste Weg nach unten.)

2

Ich bin überrascht, dass niemand dachte, Sie über Extrakt zu erzählen . Es nimmt die Werte von einem Array und verwandelt sie in lokale Variablen.Also, in diesem Fall:

function imageSize($name, $nr, $category){ 
    $path = 'ad_images/'.$category.'/'.$name.'.jpg'; 
    $path_thumb = 'ad_images/'.$category.'/thumbs/'.$name.'.jpg'; 

    $myarr = array(); 
    $myarr['thumb_image_' . $nr . '_width'] = $thumb_width; 
    $myarr['thumb_image_' . $nr . '_height'] = $thumb_height; 
    $myarr['image_image_' . $nr . '_width'] = $width; 
    $myarr['image_image_' . $nr . '_height'] = $height; 
    return $myarr; 

} 

$myImage = imageSize('myName', 'foo', $category); 
extract($myImage); 

Sie werden jetzt die Variablen haben,

$thumb_image_foo_width; 
$thumb_image_foo_height; 
$image_image_foo_width; 
$image_image_foo_height; 

in lokalen Bereich.

+0

Toller Punkt! Ich wusste vorher noch nichts von 'extract()'. Ich habe immer benutzt: 'while (list ($ key, $ val) = jedes ($ array)) {$$ key = $ val;}'. + 1. – Kit

0

Wenn Sie die Variable als Teil des $ GLOBALS-Arrays deklarieren, fügen Sie sie dem globalen Bereich hinzu.

Wie andere bereits erwähnt haben, sollten globale Variablen im globalen Gültigkeitsbereich initialisiert werden, z. B. auf NULL.

Verwandte Themen