互联网上有很多关于此警告的帖子,其中大多数都得出了相同的解决方案,但该解决方案似乎对我没有帮助。涉及到很多代码,所以我会尝试分享相关的部分,希望这足以找到解决方案。
我有一个 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;
稍后在包含的文件中是以下函数(省略了不相关的代码):
function GetLayout($LayoutID, $AllDates = 0)
{
global $clsLayout;
//DB connection made here//
//Clear any previous data we have used.
unset($arrayLayout);
$query="..."; //db query set here//
$result = mysql_query($query);
if($result == FALSE)
{
trigger_error($query);
}
if(mysql_num_rows($result) == 0)
{
echo("GetLayout Query Error 1a - No results");
return;
}
$ob = mysql_fetch_object($result);
$clsLayoutDefinition->text = $ob->text; // LINE THAT GIVES ERROR
$clsLayoutDefinition->enabled = $ob->enabled;
$clsLayoutDefinition->html_prefix = $ob->html_prefix;
$clsLayoutDefinition->html_suffix = $ob->html_suffix;
$clsLayoutDefinition->max_containers = $ob->max_containers;
$clsLayoutDefinition->container_type = $ob->container_type;
$clsLayoutDefinition->html_before_first = $ob->html_before_first;
$clsLayoutDefinition->html_between_each = $ob->html_between_each;
$clsLayoutDefinition->html_after_last = $ob->html_after_last;
$clsLayoutDefinition->layout_id = $ob->id;
// more stuff blah blah blah
}
现在,在原始文件中有一行调用 GetLayout() 函数,并传递了一个参数。但是,我收到“从空值创建默认对象”警告,该警告来自我上面提到的包含文件中的行。
在我看到的关于这种警告的帖子中,解决方案似乎总是在将项目分配给它之前必须为变量名称(在本例中为 $clsLayoutDefinition)设置一个类或其他东西。不幸的是,我似乎在这里这样做,但我仍然收到该警告。
请记住,我正在使用最初由其他人编写的代码,而且我还不太熟悉类/对象的工作方式。
出于可读性和相关性的目的,我省略了一些代码,但如果您认为这里还有其他内容需要查看更多代码,我可以发布更多代码。如果可能的话,请尽量具体说明您是否需要查看特定部分。
无论如何,这是与工作相关的,所以我希望我能尽快找到解决方案。
附带说明一下,当我几天前最初遇到这个问题时,我通过global $clsLayoutDefinition;
在 GetLayout() 函数的开头设置来“解决”它。然而,今晚在网站上工作时,我遇到了一个非常令人困惑的问题,并将其缩小到那个全局声明。当我删除全局声明时,另一个(更严重的)问题消失了,但随后我收到了警告。
提前感谢您的帮助!