2016-11-24 2 views
2

Я не понимаю, почему одна из линий не втягиваются в следующем коде: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); 
?> 

ответ

2

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

Пример

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

myLine($canvas, $white); 

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

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

$my_line(); 

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