PHP-为什么是“a”;“从空值创建默认对象”;即使定义了类,也会发出警告?

PHP-为什么是“a”;“从空值创建默认对象”;即使定义了类,也会发出警告?,php,class,object,include,warnings,Php,Class,Object,Include,Warnings,互联网上有很多关于这一警告的帖子,其中大多数都采用了相同的解决方案,但这个解决方案似乎对我没有帮助。这涉及到很多代码,所以我将尝试分享相关的部分,希望这足以找到解决方案 我有一个包含另一个PHP文件的PHP文件。包含的文件包含以下声明: class LayoutDefinition { public $text; public $enabled; public $html_prefix; public $html_suffix; public $max_c

互联网上有很多关于这一警告的帖子,其中大多数都采用了相同的解决方案,但这个解决方案似乎对我没有帮助。这涉及到很多代码,所以我将尝试分享相关的部分,希望这足以找到解决方案

我有一个包含另一个PHP文件的PHP文件。包含的文件包含以下声明:

class LayoutDefinition
{
    public $text;
    public $enabled;
    public $html_prefix;
    public $html_suffix;
    public $max_containers;
    public $html_before_first;
    public $html_between_each;
    public $html_after_last;
    public $layout_id;

}

//Create a new class instance
$clsLayoutDefinition = new LayoutDefinition;
后面包含的文件中有以下函数(省略了不相关的代码):

现在,在原始文件中有一行调用GetLayout()函数,传递一个参数。但是,我得到了“从空值创建默认对象”警告,它来自我上面提到的包含文件中的行

在我看到的关于此类警告的帖子中,解决方案似乎总是在为变量名(在本例中为$clsLayoutDefinition)分配项之前,必须为其设置一个类或其他内容。不幸的是,我似乎在这里这样做,但我仍然收到警告

请记住,我使用的代码最初是由其他人编写的,我还不太熟悉类/对象的工作方式

出于可读性和相关性的目的,我省略了一些代码,但是如果您认为这里还有其他东西需要查看,我可以发布更多的代码。如果可能的话,如果你需要看某个特定的部分,就尽量说得具体一点

无论如何,这是工作相关的,所以我希望我能尽快找到解决方案

另一方面,几天前当我最初遇到这个问题时,我通过设置
global$clsLayoutDefinition来“解决”它。然而,今晚在这个网站上工作的时候,我遇到了一个非常令人困惑的问题,并把它缩小到了那个全球宣言。当我删除全局声明时,另一个(更严重的)问题消失了,但随后我得到了警告

提前感谢您的帮助

Put

$clsLayoutDefinition = new LayoutDefinition;
GetLayout
函数中,并以以下内容结束函数:

 return $clsLayoutDefinition;
然后调用方应执行以下操作:

$clsLayoutDefinition = GetLayout(...);

另外,请不要使用
mysql.*
函数来编写新代码。它们不再得到维护,社区已经开始。看到了吗?相反,你应该学习并使用或。如果你不能决定哪一个,我会帮你的。如果你选择PDO,那么这是一个相当大并且已经建成的网站,所以我不认为现在将所有的数据库功能都切换到PDO或MySQLi是理想的选择。再说一遍,我不是负责人。我得和老板商量一下,看他是否愿意付钱让我花时间去做。无论如何,您提到过使用数组。虽然我确实理解数组,但我不知道如何实现您在这个特定情况下提出的建议。。评论中提到了“新代码”。既然你说这是一个大型的现有项目,那就把它留到下一个项目。哦,在产生错误的那一行之前试试
var\u dump($ob)
。。虽然我仍然认为,如果你有一个没有方法和所有公共变量的类,你应该使用一个数组。它不是很大,但关键是我的时间是有报酬的,所以我花时间在什么上并不取决于我,尽管我工作的人对接受我的建议很酷。就你的阵列想法而言。。。有没有可能让我对在这种情况下如何使用阵列有更多的了解?谢谢你的想法。我可以看到它将如何工作,但是该函数已经返回了其他内容。尽管如此,我认为我可以定义
$clsLayoutDefinition=newlayoutdefinition在函数中,而不必在最后返回它。我假设函数之外的某些东西需要它,因为它是一个全局变量。如果没有,那就应该行了。好吧,我注意到
$clsLayout
也在该函数中使用,我还注意到有
$clsLayout=newlayout
是在使用之前定义的,因此通过对
$clsLayoutDefinition
执行相同的操作,我认为它可能会像您建议的那样有所帮助。。。到目前为止,它似乎已经奏效了!我不确定这是否会影响网站的其他内容,但警告已经消失了。谢谢你的提示!不过,我只需要它的第一部分。
$clsLayoutDefinition = GetLayout(...);