Php 为什么我的代码没有';当我把它投入运行时,它不能正常工作吗?
我有一个名为的脚本,它根据两个参数生成化身(类似stackoverflow的化身):Php 为什么我的代码没有';当我把它投入运行时,它不能正常工作吗?,php,function,Php,Function,我有一个名为的脚本,它根据两个参数生成化身(类似stackoverflow的化身): 大小(它是化身的大小) 散列(化身的形状和颜色将取决于此) 我也有这样的文件夹结构: \out MakeAvatar.php \root \classes classname.php \img /* where images (avatars) are saved */ 现在有两种情况: 当我在功能失效时使用MakeAvatar.php时,它也能
- 大小(它是化身的大小)
- 散列(化身的形状和颜色将取决于此)
\out
MakeAvatar.php
\root
\classes
classname.php
\img
/* where images (avatars) are saved */
现在有两种情况:
- 当我在功能失效时使用
时,它也能正常工作,输出将是一个化身,另存为MakeAvatar.php
图像:.png
// 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
// 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@diEchoclassname.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还有一件事是如何传递参数。创建一个变量,然后在包含的文件中使用它。这是可行的,但我认为这不是一个好主意。因为不容易猜测应该指定哪些参数。