PHP类-获取非对象的属性&;未定义的通知

PHP类-获取非对象的属性&;未定义的通知,php,wordpress,Php,Wordpress,*edit已修复此代码-请参阅标记为edit*的内联注释。 在wordpress主题中使用以下代码时,我收到一些PHP调试通知。这是我第一次尝试使用PHP类,它确实可以正常工作,但调试通知与我有关。我在PHP模板中调用该方法,因此: & 调试注意事项如下: 注意:未定义变量:post 注意:尝试获取非对象的属性 根据我所做的研究,这看起来像是类有时返回非对象的问题,因此我尝试将“echo”包装在isset和is_object中,但我无法修复这些注意事项 下面是简化的代码。为了我的理智,我真的需要

*edit已修复此代码-请参阅标记为edit*的内联注释。

在wordpress主题中使用以下代码时,我收到一些PHP调试通知。这是我第一次尝试使用PHP类,它确实可以正常工作,但调试通知与我有关。我在PHP模板中调用该方法,因此:

&

调试注意事项如下:

注意:未定义变量:post

注意:尝试获取非对象的属性

根据我所做的研究,这看起来像是类有时返回非对象的问题,因此我尝试将“echo”包装在
isset
is_object
中,但我无法修复这些注意事项

下面是简化的代码。为了我的理智,我真的需要一些帮助

    // define the class

class getJobMeta { 

    var $jobmeta_echo; // set a class variable to store our echo

    public function job_type() { // define a class function and make it public

            global $post // EDIT IN FIX

          if ( 'post' == get_post_type() )  {       
                   $jobtype = get_the_term_list( $post->ID, 'job-type', '<span itemprop="employmentType">', ', ', '</span>', 0 ); // 0 at end of arg signifies that we don't want links outputted
                   }

          else { 
                    return ''; 
               }

     echo $jobtype.$this->jobmeta_echo;

     } // end function job_type

    // define post type


  public function post_types() { 

               global $post // EDIT IN FIX


        if ('post' == get_post_type())  {
                    $posttype = get_the_term_list( $post->ID, 'channel', '<strong class="channel-links clearfix">', ', ', '</strong>', 1); // 1 means output as link

            } elseif ( 'blog' == get_post_type() )  {
                $posttype = '<a href="/blog/" class="post-type-label">Blog</a>';

            } elseif ( 'type2' == get_post_type() )  {
                $posttype = '<a href="/type2/" class="post-type-label">Type2</a>';

        } else {
                $posttype = '';
        }


    echo $posttype.$this->jobmeta_echo;  // EDIT TYPO


    } // end function posttype


   } // end getJobMeta class

    // set the class into a variable
    $getjobmeta = new getJobMeta; 
//定义类
类getJobMeta{
var$jobmeta_echo;//设置一个类变量来存储我们的echo
公共函数job_type(){//定义一个类函数并将其公开
全局$post//在修复中编辑
如果('post'==get_post_type()){
$jobtype=get_-term_列表($post->ID,'job-type','','',0);//arg末尾的0表示不希望输出链接
}
否则{
返回“”;
}
echo$jobtype.$this->jobmeta\u echo;
}//结束函数作业类型
//定义职位类型
公共函数post_type(){
全局$post//在修复中编辑
if('post'==get\u post\u type()){
$posttype=get_-term_列表($post->ID,'channel',',',',',1);//1表示作为链接输出
}elseif('blog'==get\u post\u type()){
$posttype='';
}elseif('type2'==get\u post\u type()){
$posttype='';
}否则{
$posttype='';
}
echo$posttype.$this->jobmeta\u echo;//编辑打字错误
}//结束函数posttype
}//结束getJobMeta类
//将类设置为变量
$getjobmeta=新的getjobmeta;
谢谢
Ben

您在这里询问Wordpress,而
$post
是一个全局变量,因此您需要在函数中定义它:

public function job_type() {
    global $post;
    ...

public function post_types() { 
    global $post;
    ...

您在这里询问Wordpress,
$post
是一个全局变量,因此您需要在函数中定义它:

public function job_type() {
    global $post;
    ...

public function post_types() { 
    global $post;
    ...

警告很可能来自这一行:

$jobtype = get_the_term_list( $post->ID, 'job-type', '<span itemprop="employmentType">', ', ', '</span>', 0 ); // 0 at end of arg signifies that we don't want
$jobtype=获取术语列表($post->ID,'job type','','','',0);//arg末尾的0表示我们不希望
特别是
$post->ID


这在代码中没有初始化,因此出现了两个警告。

这些警告很可能来自这一行:

$jobtype = get_the_term_list( $post->ID, 'job-type', '<span itemprop="employmentType">', ', ', '</span>', 0 ); // 0 at end of arg signifies that we don't want
$jobtype=获取术语列表($post->ID,'job type','','','',0);//arg末尾的0表示我们不希望
特别是
$post->ID


这在代码中没有初始化,因此出现了两个警告。

您在两个位置使用了
$post->ID
,这似乎超出了您的类的范围。也许这些应该是
$this->post->ID
?我不知道Wordpress的内部结构
$posttype=获取术语列表($post->ID,
“调用类”不正确。你可以调用方法。要调用方法,你应该创建一个对象或调用静态方法。你能提供更多的代码吗?$getjobmeta是如何定义的?@Michael,是的,你发现了。这是wordpress的问题。我需要在我的函数中定义全局$post,正如hakre所指出的。谢谢!@Vitalmax-很抱歉,你失去了我。你是说我应该以不同的方式构建我的类?任何关于最佳实践的指导都会很棒。这是我的第一次尝试。别忘了。谢谢你的输入。@Vitalmax-啊,我明白你的意思。我已经编辑了问题,并将“调用类”改为“调用方法”。谢谢你指出。你在两个地方使用了
$post->ID
,这似乎超出了你的类的范围。也许这些应该是
$this->post->ID
?我不知道Wordpress的内部结构。
$posttype=获取术语列表($post->ID,
“调用类”不正确。你可以调用方法。要调用方法,你应该创建一个对象或调用静态方法。你能提供更多的代码吗?$getjobmeta是如何定义的?@Michael,是的,你发现了。这是wordpress的问题。我需要在我的函数中定义全局$post,正如hakre所指出的。谢谢!@Vitalmax-很抱歉,你失去了我。你是说我应该以不同的方式构建我的类?任何关于最佳实践的指导都会很棒。这是我的第一次尝试。别忘了。谢谢你的输入。@Vitalmax-啊,我明白你的意思。我已经编辑了问题,并将“调用类”改为“调用方法”。谢谢你指出。hakre,spot on。谢谢。global$post,是的,很抱歉这显然是一个与wordpress相关的问题。事实上,我现在收到一个新通知:
未定义属性:getJobMeta::$our_echo
,关于输出HTML字符串的调用,例如post类型的博客。这可能与未跳过的HTML有关吗?不,这与我无关h unescaped HTML。这与变量有关,并且它不是
getJobMeta
的成员。请查看类顶部的变量定义。它称为
jobmeta\u echo
而不是
our\u echo
。PHP警告您访问了一个不存在的成员(例如,变量名称拼写错误)。太棒了。非常感谢!我应该注意公平。再次感谢。hakre,注意。感谢。global$post,是的,很抱歉这显然是一个与wordpress相关的问题。事实上,我现在收到一个新通知:
未定义属性:getJobMeta::$our_echo
,关于输出HTML字符串的调用,例如post-type博客。这样做可以吗使用未缩放的HTML?不,这与w无关