PHP GD создает изображение с помощью функции

Я не понимаю, почему одна из строк не рисуется в следующем коде:

<?php
    $canvas = imagecreatetruecolor(100, 100);

    $white = imagecolorallocate($canvas, 255, 255, 255);
    $black = imagecolorallocate($canvas, 0, 0, 0);

    imagefill($canvas,0,0,$black);

    function myLine()
    {
        imageline($canvas, 0,20,100,20,$white);
    }

    imageline($canvas, 0,60,100,60,$white); //this line is printed..
    myLine(); //but this line is not

    header('Content-Type: image/jpeg');
    imagejpeg($canvas);
    imagedestroy($canvas);
?>

person pi.314    schedule 24.11.2016    source источник


Ответы (1)


Причина в том, что вы ссылаетесь на переменные $canvas и $white в функции myLine, а эти переменные недоступны в область действия этой функции. Вы должны либо передать их в качестве аргументов, либо использовать global ключевое слово.

Пример

function myLine($canvas, $color) {
  imageline($canvas, 0,20,100,20, $color);
}

myLine($canvas, $white);

Вы также можете использовать анонимную функцию следующим образом:

$my_line = function() use ($canvas, $white) {
    imageline($canvas, 0,20,100,20, $white);
};

$my_line();

В этом коде переменные $canvas и $white берутся из текущей области видимости.

person Ruslan Osmanov    schedule 24.11.2016