2016-11-24 1 views
2

Je ne comprends pas pourquoi l'une des lignes n'est pas en cours d'élaboration dans le code suivant:PHP GD création d'une image en utilisant une fonction

<?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); 
?> 

Répondre

2

La raison en est que vous faites référence à $canvas et $white variables à l'intérieur myLine fonction, et ces variables ne sont pas disponibles dans le scope de cette fonction. Vous devez les passer en argument ou utiliser global keyword.

Exemple

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

myLine($canvas, $white); 

Vous pouvez également utiliser un anonymous function comme suit:

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

$my_line(); 

Dans ce code, sont prises les variables $canvas et $white du champ d'application actuel.