0

私はこのコードを持っています:

$img=imagecreatefrompng('http://partner-ad.photobucket.com/albums/g46/xanatha/WidgieWorld/Small-Yellow-Ball.png');

function foo($x,$y)
{
    $col=imagecolorat($img,$x,$y);
    $col=imagecolorsforindex($img,$col);
    var_dump($col);
}
foo(0,0);

echo '<br />';

$col=imagecolorat($img,0,0);
$col=imagecolorsforindex($img,$col);
var_dump($col);

一見すると、同じ結果が 2 回出力されると思います。

しかし、出力は次のとおりです。

NULL
array(4) { ["red"]=> int(255) ["green"]=> int(255) ["blue"]=> int(255) ["alpha"]=> int(0) } 

どうしてですか?
コードを関数に入れて機能させるにはどうすればよいですか?

4

4 に答える 4

2

$imgas引数を渡そうとしましたか?

または、引数として渡さないことを本当に主張する場合$img。それを関数の一番上に置くこともできます。

global $img;

誰かが言ったように、この質問。$img関数スコープで定義されていません。それにアクセスするにはglobal、グローバル変数の場合に使用する必要があります。または、パラメータとして渡す必要があります。

于 2012-07-08T09:49:27.083 に答える
1

$img関数内では見えません。関数を表示するには、関数内で global キーワードを使用する必要があります。

$img=imagecreatefrompng('http://partner-ad.photobucket.com/albums/g46/xanatha/WidgieWorld/Small-Yellow-Ball.png');

function foo($x,$y)
{
    global $img; //<--------------Makes $img visible inside the function
    $col=imagecolorat($img,$x,$y);
    $col=imagecolorsforindex($img,$col);
    var_dump($col);
}
foo(0,0);

echo '<br />';

$col=imagecolorat($img,0,0);
$col=imagecolorsforindex($img,$col);
var_dump($col);

php.net/manual/language.variables.scope.phpを参照してください

于 2012-07-08T09:52:48.210 に答える
0
function foo($x,$y,$img)
{
    $img_png = imagecreatefrompng($img);
    $col=imagecolorat($img_png,$x,$y);
    $col=imagecolorsforindex($img_png,$col);
    var_dump($col);
}
foo(0,0,'http://partner-ad.photobucket.com/albums/g46/xanatha/WidgieWorld/Small-Yellow-Ball.png');

関数の外で定義されたその変数にアクセスできません。

于 2012-07-08T09:50:32.777 に答える
0

変数には関数スコープがあります。$imgは定義されておらず、foo関数内では使用できません。これも関数に渡す必要があります。

于 2012-07-08T09:50:55.557 に答える