この警告に関してインターネット上には多数の投稿があり、それらのほとんどは同じ解決策にたどり着きましたが、その解決策は私を助けていないようです. 関連するコードがたくさんあるので、関連するビットを共有しようとします。解決策にたどり着くのに十分であることを願っています.
別の 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() 関数の先頭に設定することで「解決」しました。しかし、今夜、このサイトで作業しているときに、非常に紛らわしい問題に遭遇し、それをそのグローバル宣言に絞り込みました. グローバル宣言を削除すると、他の (より深刻な) 問題はなくなりますが、警告が表示されます。
助けてくれてありがとう!