【问题标题】:Fatal error: Using $this when not in object context致命错误:不在对象上下文中使用 $this
【发布时间】:2010-12-11 06:20:56
【问题描述】:

如果有错误,这里是部分。

致命错误:不在时使用 $this 对象上下文 /pb_events.php 在第 6 行

第 6 行是:$jpp = $this->vars->data["jpp"];

function DoEvents($this) {

    global $_CONF, $_PAGE, $_TSM , $base;

    $jpp = $this->vars->data["jpp"];

    $cache["departments"] = $this->db->QFetchRowArray("SELECT * FROM {$this->tables[job_departments]}");
    $cache["locations"] = $this->db->QFetchRowArray("SELECT * FROM {$this->tables[job_location]}");
    $cache["names"] = $this->db->QFetchRowArray("SELECT * FROM {$this->tables[job_names]}");
    $cache["categories"] = $this->db->QFetchRowArray("SELECT * FROM {$this->tables[job_categories]}");

非常感谢!欣赏!

【问题讨论】:

    标签: php oop fatal-error


    【解决方案1】:

    $this 只在方法中有意义,在函数中没有意义

    没关系

    class Foo {
         function bar() {
              $this->...
    

    这不是

    function some() {
        $this->
    

    // 编辑:没有注意到他将“$this”作为参数传递

    建议:只需将“$this”替换为“$somethingElse”

    【讨论】:

    • 感谢您的回复!这是一个在 PHP4 上运行良好的开源软件代码。现在我尝试使用 PHP5 并出现错误:/ 我不太擅长 php:/ 试图根据您的建议解决问题...
    • 那么我该如何编辑呢? :/如果我把一个类放在最上面,其他页面都不能工作......大混乱
    • 哇哇哇哇!我爱你@@@@!!!!救生员!!!!非常感谢! :) )woaaaa 好开心!!
    • 即使在 Foo 内部使用 self::bar() 也会出现此错误。
    • 如果您将方法声明为静态,您也会收到此错误。所有静态方法都被认为是在类范围之外调用的
    【解决方案2】:

    您不能将$this 传递给程序函数。 $this 是保留变量。

    【讨论】:

    • 嘿,谢谢!那么您对解决方案有何建议?你能说清楚一点吗?我不太擅长 php :/
    • 只需更改传递的变量的名称。检查我的答案。
    • 迈克尔是绝对正确的。只需更改变量的名称即可。
    【解决方案3】:

    你必须先制作对象。

       $object=new Myobject;
       DoEvents($object);
    

    【讨论】:

      【解决方案4】:

      根据我的 cmets。 您想使用 $this 作为传递变量,而 php 不允许它在类方法主体之外。

      function DoEvents($obj) {
      
          global $_CONF, $_PAGE, $_TSM , $base;
      
          $jpp = $obj->vars->data["jpp"];
      
          $cache["departments"] = $obj->db->QFetchRowArray("SELECT * FROM {$obj->tables[job_departments]}");
          $cache["locations"] = $obj->db->QFetchRowArray("SELECT * FROM {$obj->tables[job_location]}");
          $cache["names"] = $obj->db->QFetchRowArray("SELECT * FROM {$obj->tables[job_names]}");
          $cache["categories"] = $obj->db->QFetchRowArray("SELECT * FROM {$obj->tables[job_categories]}");
      

      【讨论】:

      • 是的!这就是问题!我真傻!在你的评论之前排序......你也是救命稻草!多谢!!!你们太棒了!
      猜你喜欢
      • 2011-01-21
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多