我得到了“在非对象上调用成员函数embed()”的错误,但我可以看到var\\u dump的结果是一个对象。请帮助评估以下代码:
这是创建图片的类:
Class Picture{
//....
function embed() {...}
//....
}
这是模板的类:
Class Picture_Template{
$obj_id = $post->ID;
$pic = New Picture( $obj_id );
$this->obj = $pic;
}
这是一个测试代码的函数:
function test_picture(){
global $pic_template;
$pic_template = new Picture_Template();
$obj =$pic_template->obj;
$obj_func =$obj->embed();
echo \'<pre>\';
var_dump( $obj ); // I can see it is an object
var_dump( $obj_func ); // I can see the embed() function output correct result
}
这是获取错误消息的函数:
function play_button(){
echo get_play_button();
}
function get_play_button(){
global $pic_template;
if (!$obj )
$obj =& $pic_template->obj;
if ( $obj->embed(){
//do something
}
}
最合适的回答,由SO网友:TheDeadMedic 整理而成
在我看来Picture_Template
毫无价值-它甚至没有正确的格式(您需要将运行时代码放在constructor).
此外,您似乎还缺乏对variable scope (如访问$post
和$obj
在函数和类中,而不是首先将它们全球化)。
以下是我认为你正在尝试做的事情;
function test_picture()
{
$picture = new Picture( get_the_ID() );
$picture_result = $picture->embed();
/* debugging */
echo \'<pre>\';
var_dump( $picture );
var_dump( $picture_result );
echo \'</pre>\';
}
function play_button()
{
echo get_play_button();
}
function get_play_button()
{
$picture = new Picture( get_the_ID() );
if ( $embed = $picture->embed() ) {
// do something & return something
}
return null; // return nothing if embed failed
}