Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:不在对象上下文中使用$this无法正常工作_Php - Fatal编程技术网

Php 致命错误:不在对象上下文中使用$this无法正常工作

Php 致命错误:不在对象上下文中使用$this无法正常工作,php,Php,当我执行上面的代码时,我得到以下错误 致命错误:在中不在对象上下文中时使用$this 第13行的C:\Workspace\htdocs\Misc-2\nurbell1\core\conf\Misc.php 我做错了什么?显然,$this在我的代码中被引用。您在静态函数中使用了$this,该函数不属于当前实例/上下文,因此无法在不属于当前实例/上下文的静态函数中使用$this,因此无法在静态函数中使用您正在调用的this。只有当您拥有类函数的对象时,才能使用此。您必须使用self关键字才能访问静态

当我执行上面的代码时,我得到以下错误

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


我做错了什么?显然,$this在我的代码中被引用。

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

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

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


请阅读本手册,了解有关您在静态函数中调用此
self
关键字的更多信息。只有当您拥有类
函数
的对象时,才能使用
。您必须使用
self
关键字才能访问静态函数

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


有关
self
keyword

的更多信息,请阅读本手册。您不能在静态方法中使用$this,因为$this指的是对象而不是类,并且您不能保证在调用静态方法时拥有对象。相反,您可以使用“self::method()”从同一个类中调用静态方法


您应该阅读PHP OOP的工作原理:以及类和对象之间的区别:

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


您应该了解PHP OOP的工作原理:以及类和对象之间的区别:

I did bro。你没看到利率吗?你对答案投了高票。但是我没有接受。向上投票与接受不同。当你接受答案时,答案旁边会有一个绿色的勾号。你没看到利率吗?你对答案投了高票。但是我没有接受。向上投票与接受不同。当您接受答案时,答案旁边会出现一个绿色的勾号。
<?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");
?>