首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >致命错误:在对象上下文中不能正常工作时使用$this

致命错误:在对象上下文中不能正常工作时使用$this
EN

Stack Overflow用户
提问于 2011-11-24 12:30:19
回答 3查看 1.1K关注 0票数 0
代码语言:javascript
复制
<?php
class Functions {
    public static function extendSql($dbhost, $dbuser, $dbpass, $dbname) {
        // making the mysql connection dynamically editable
        $mysql_connect  =   mysql_connect($dbhost, $dbuser, $dbpass)or die("Could not connect: " . mysql_error());
        $mysql_select_db =  mysql_select_db($dbname) or die(mysql_error());
    }
    public static function whileLoop($dbuser, $dbpass, $dbname, $sql, $passedData) {
        $this->extendSql($dbuser, $dbpass, $dbname);
        $results = mysql_query($sql);       
        while ($row = mysql_fetch_array($results)) {
        echo $passedData;
        }
    }
}

Functions::whileLoop("root", "", "rand", "SELECT * FROM products",
$hello = "hi all");
?>

在执行上述代码时,我会得到以下错误。

致命错误:在第13行的C:\Workspace\htdocs\Misc-2\nurbell1\core\conf\misc.php中未在对象上下文中使用$this

我做错了什么?显然,$this是在代码中的类上下文中引用的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-24 12:32:22

您在静态函数中使用$this,它不属于当前实例/上下文,因此无法使用$this

票数 1
EN

Stack Overflow用户

发布于 2011-11-24 12:34:32

在静态函数中调用this。只有当您拥有类this的对象时,才能使用Function。您必须使用self关键字来访问静态函数。

将代码更改为self::extendSql($dbuser, $dbpass, $dbname);

有关self关键字的更多信息,请阅读此手册

票数 1
EN

Stack Overflow用户

发布于 2011-11-24 12:35:33

不能在静态方法中使用$this,因为$this引用的是对象而不是类,并且不能保证在调用静态方法时有一个对象。相反,您可以使用"self:: method ()“从同一个类中调用静态方法。

您应该阅读PHP如何工作:PHP中的OO,以及类和对象之间的区别是什么:对象和类的区别

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8257082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档