Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的代码没有';当我把它投入运行时,它不能正常工作吗?_Php_Function - Fatal编程技术网

Php 为什么我的代码没有';当我把它投入运行时,它不能正常工作吗?

Php 为什么我的代码没有';当我把它投入运行时,它不能正常工作吗?,php,function,Php,Function,我有一个名为的脚本,它根据两个参数生成化身(类似stackoverflow的化身): 大小(它是化身的大小) 散列(化身的形状和颜色将取决于此) 我也有这样的文件夹结构: \out MakeAvatar.php \root \classes classname.php \img /* where images (avatars) are saved */ 现在有两种情况: 当我在功能失效时使用MakeAvatar.php时,它也能

我有一个名为的脚本,它根据两个参数生成化身(类似stackoverflow的化身):

  • 大小(它是化身的大小)
  • 散列(化身的形状和颜色将取决于此)
我也有这样的文件夹结构:

\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");
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();
输出:


  • 当我在函数中使用
    MakeAvatar.php
    时,它不起作用,输出将是一个黑色图像(对于将发送的每个参数都是相同的)
classname.php

// these two parameters are changeable and these are just as an example
$size = 100;
$hash  = 'somettext';
require("../out/MakeAvatar.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();
输出:


怎么了?我怎样才能修好它?为什么当我将
MakeAvatar.php
扭曲成一个函数时,id不能创建正确的化身


这是我将
MakeAvatar.php
放入函数时得到的结果。

我已经检查了文件的代码,问题似乎出现在下面的代码中

/* generate sprite for corners and sides */
function getsprite($shape,$R,$G,$B,$rotation) {
    global $spriteZ;
变量
$spriteZ
在文件的第327行中定义。但当您将文件包含在函数中时,此变量不会创建为全局变量,而是函数中的一个变量。检查手册

这意味着在
getsprite)
函数中,变量
$spriteZ
具有
null
值,因为当文件包含在函数中时,没有这样的全局变量
$spriteZ
(它未初始化为全局变量)。这就是调用函数
imageCreateTureColor()
失败并出现错误的原因

警告:ImageCreateTureColor():中的图像尺寸无效 第7行的C:\xampp\htdocs\unaccessible\identicon.php

我建议修改
getsprite()
getcenter()
函数,并将此变量作为参数提供。因为全局变量可能非常混乱


p、 一般来说,代码体系结构不是最佳的,但我想这超出了问题的范围。

显示
autoloader.php的代码以及(autoloader称之为)添加文件所用的方法,而不是autoloader的用法。提示:您必须使用
require_一次
,那么您是否包含了
autoloader.php
?您直接包括了
MakeAvatar.php
,而不是使用autoloader.php,而且您的文件名是MakeAvatar@diEcho
classname.php
由autoloader调用(不是
MakeAvatar.php
)。而且我已经测试了一次
require\u
,问题仍然存在。@diEcho我的意思是“相同的”是“所有那些相同的黑色图像”。我已经将
autoloader.php
包含在
classname.php
中,看起来包含的文件使用了从函数调用时不可用的变量。但没有办法更详细地说明它是什么。您提供的代码似乎不相关。阿凡达创造者代码是一个有问题的代码。我没有看到评论。但诀窍是,在类中初始化它是不够的,因为即使这样做,它也不会成为全局的。您可以在创建类之前初始化它
$obj=new classname()。这可能允许您在代码中做更少的更改。但在这种情况下,您将有两个同名变量。如果答案正确,请记住接受答案,以确保其他人不会花时间解决已经解决的问题。我初始化了
global$spriteZ
$obj=new classname()之前(如你所说)。它是有效的。有什么问题吗?你是什么意思,但在这种情况下,你将有两个同名的变量?@stack我发现了几个问题。1.使用全局变量不是最好的主意。2.当您包含文件
MakeAvatar.php
时,会发生一些事情。这也不完美。我相信代码应该在一些函数中。3.我认为创建一个MakeAvatar类并将该类中的所有逻辑定义为类方法可能是一个好主意。在这种情况下,您不需要包含任何文件,而是创建一个类,定义设置并调用类方法来创建化身。4.你可以问一个问题,如果你愿意,我想人们可能会帮助你建立一个更好的架构。但这可能需要做很多工作。@stack还有一件事是如何传递参数。创建一个变量,然后在包含的文件中使用它。这是可行的,但我认为这不是一个好主意。因为不容易猜测应该指定哪些参数。