0

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

我有一个 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() 函数的开头设置来“解决”它。然而,今晚在网站上工作时,我遇到了一个非常令人困惑的问题,并将其缩小到那个全局声明。当我删除全局声明时,另一个(更严重的)问题消失了,但随后我收到了警告。

提前感谢您的帮助!

4

1 回答 1

1

$clsLayoutDefinition = new LayoutDefinition;

GetLayout函数内部并以以下方式结束函数:

 return $clsLayoutDefinition;

调用者应该这样做:

$clsLayoutDefinition = GetLayout(...);
于 2012-09-28T01:54:18.020 回答