我有这个声明变量的函数:
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;
}
当我回应这个时:
echo $image_1_width
它工作正常,但是如果我在外面执行它不会识别变量的函数,我怎么能以某种方式使它们成为“全局”?
由于
答案 0 :(得分:13)
我强烈建议不使用全球。
从函数返回可能最好的是:
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);
然后你访问每个var:
echo $myImage['thumb_image_1_width'];
echo $myImage['thumb_image_1_height'];
echo $myImage['image_1_weight'];
echo $myImage['image_1_height'];
等
答案 1 :(得分:9)
您必须在函数之外定义它们。在函数内部使用global关键字之前使用它:
$someVar = null;
function SomeFunc () {
global $someVar;
// change $someVar
}
// somewhere later
SomeFunc ();
echo $someVar;
但是,请注意,这是一个非常糟糕的设计选择!
答案 2 :(得分:2)
你也可以创建一个数组或一个对象然后返回 - 例如
$dimensions[$nr] = imageSize($name,$category);
echo "Thumb width " . $dimensions[$nr]['thumb_width'];
然后在函数本身
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;
}
答案 3 :(得分:2)
我很惊讶没有人想过要提醒你。它将从数组中获取值并将它们转换为局部变量。所以,在这种情况下:
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 );
您现在将拥有变量
$thumb_image_foo_width;
$thumb_image_foo_height;
$image_image_foo_width;
$image_image_foo_height;
在当地范围内。
答案 4 :(得分:1)
听起来好像你想要实现一个类而不是一个函数。类似的东西:
class myImage {
function __construct($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);
$this->{'thumb_image_' . $nr . '_width'} = $thumb_width;
$this->{'thumb_image_' . $nr . '_height'} = $thumb_height;
$this->{'image_' . $nr . '_width'} = $width;
$this->{'image_' . $nr . '_height'} = $height;
}
}
$image= new myImage($name, $nr, $category);
echo $image->'image_1_width';
当然,通过这种结构,您不必将变量名称粘合在一起。你可以$image->width
。
答案 5 :(得分:1)
我是第二个@Lizard的回答。而且,听起来好像读variable scope有点不会有问题。 (注意,该链接确实包含了如何使用全局变量的说明。就像许多人所说的那样,不是最好的道路。)
答案 6 :(得分:0)
使用global
?
答案 7 :(得分:0)
返回函数内部的值,而不是使用全局变量
答案 8 :(得分:0)
如果将变量声明为$ GLOBALS数组的一部分,则将其添加到全局范围。
$GLOBALS['variable name'] = 'value';
正如其他人所提到的,全局变量应该在全局范围内初始化,例如为NULL。
答案 9 :(得分:-1)
$var = 4;
function bla ()
{
global $var;
return $var;
}
它将返回4,因为变量是全局变量。希望这是你想要的。