2016-04-29 75 views
1

我有一個劇本叫MakeAvatar.php產生基於兩個參數的頭像(類似計算器的化身)爲什麼我的代碼在功能上無法正常工作?

  • 大小(它是化身的大小)
  • 哈希(形狀和彩色頭像將取決於此)

ASLO我有這樣的文件夾結構:

現在
\out 
    MakeAvatar.php 
\root 
    \classes 
     classname.php 
    \img 
     /* where images (avatars) are saved */ 

,有兩種情況:

  • 當我使用MakeAvatar.php出來的功能它的工作原理,以及和輸出將其保存爲.png圖像的化身:

classname.php

// these two parameters are changeable and these are just as an example 
$size = 100; 
$hash = 'somettext'; 
require("../out/MakeAvatar.php"); 

輸出:

enter image description here


  • 當我使用MakeAvatar.php成函數它不工作,以及,輸出將是一個黑色圖像(這是爲每一個參數,該參數將是相同的發送)

classname.php

class classname{ 
    function index() { 
     // these two parameters are changeable and these are just as an example 
     $size = 100; 
     $hash = 'somettext'; 
     require("../out/MakeAvatar.php"); 
    } 
} 

$obj = new classname; 
$obj->index(); 

輸出:

enter image description here


這有什麼錯呢?我該如何解決它?爲什麼當我將MakeAvatar.php變成函數時,id不會創建正確的頭像?

這裏是the errors當我把MakeAvatar.php放入功能時,我得到了。

+0

顯示'autoloader.php'的代碼以及(由自動加載器調用的)意味着什麼,您在這裏添加的文件是require而不是自動加載器的用法。 **提示:**您必須使用'require_once' – diEcho

+0

@diEcho我做了... – stack

+0

那麼您是否包含'autoloader.php'?你直接包含'MakeAvatar.php',而不是這個,你必須使用autoloader.php,否則它是不區分大小寫的,你的文件名是MakeAvatar。 – diEcho

回答

1

我已經檢查了代號爲MakeAvatar.php文件,好像問題是在下面的代碼

/* generate sprite for corners and sides */ 
function getsprite($shape,$R,$G,$B,$rotation) { 
    global $spriteZ; 

變量$spriteZ在文件中的行#327定義。但是當你在函數中包含文件時,這個變量是而不是創建爲全局變量,但是這是一個函數內部的變量。檢查variable scope手冊。

這意味着內部getsprite)功能可變$spriteZ具有null值,因爲當被包括在函數內部的文件不存在這樣的全局變量$spriteZ(它沒有被初始化爲全局變量)。這就是爲什麼功能imagecreatetruecolor()調用失敗,錯誤

警告:imagecreatetruecolor():在 Ç圖片尺寸無效:\ XAMPP \ htdocs中\不可訪問\ identicon.php線路7

我建議修改getsprite()getcenter()函數並提供此變量作爲參數。導致全局變量可能非常混亂。

p.s.一般的代碼架構並不是最優的,但我想這已經超出了問題的範圍。

+0

我還沒有看到評論。但訣竅是,在課堂上初始化它是不夠的,因爲即使你這樣做了,它也不會成爲全局的。您可以在創建類'$ obj = new classname();'之前初始化它。這可能會讓您在代碼中做更少的更改。但在這種情況下,您將有兩個具有相同名稱的變量。 –

+0

如果確定其他人不花時間解決已解決的問題,請記住接受答案。 –

+0

我在'$ obj = new classname();'*(如你所說)*之前初始化了'global $ spriteZ;'。它的工作原理。有什麼問題嗎?你是什​​麼意思*但在這種情況下,你將有兩個相同名稱的變量*? – stack