如何从其他函数文件中调用类的函数?

时间:2013-07-23 22:09:30

标签: php mysqli

我知道这不是我问题的最佳标题,但我不能提出更好的标题(建议欢迎)

嗯,这是我的情况,我有3个文件:

1)classDBConn.php - 在这个文件中,我连接到数据库,并有一些像这样的函数:

class DBConn{
var $conexion;
private $querySql;
var $respuesta;
var $resultado;
function __construct() { 
    $this->conexion = @mysqli_connect('localhost', 'root', 'pass', 'dataBase');
    if(!$this->conexion){
        die('error de conexion('.mysqli_connect_errno().')'.mysqli_connect_error());    
    }
}
function checkBracketGanador($id_torneo){
    $this->querySql = "SELECT COUNT(id_ganador) FROM brackets WHERE id_torneo = '$id_torneo'";
    $this->respuesta = mysqli_query($this->conexion,$this->querySql);
    $this->resultado = mysqli_fetch_array($this->respuesta);
    return $this->resultado[0];
}
// More functions with queries

注意:查询和功能都很好

2)inc_conf.php - 在这个文件中我创建了会话和对象DBConn。代码:

session_start();
include('classDBConn.php');
$functionsDBConn= new DBConn();
$id_usuario = isset($_SESSION["IDUSUARIO"]) ? $_SESSION["IDUSUARIO"] : false;

3)workingOn.php - 在这个文件中我调用DBConn以便使用这些查询。如果我这样打电话就好了:

$res = $functionsDBConn->checkBracketGanador($id_torneo);
echo $res;

但是,如果我在一个函数中执行它就会出现问题

function test(){
    $res = $functionsDBConn->checkBracketGanador($id_torneo);
    return $res;
}
$a = test();
echo $a;

我一直收到这个错误:

致命错误:在第67行的... / someFolder / workingOn.php中的非对象上调用成员函数checkBracketGanador()

我尝试在classDBConn中创建公共函数但是没有工作

我正在做的是在函数外部调用函数并将结果作为参数发送到另一个函数,但这正是我想要避免的内容

任何帮助都表示赞赏。提前谢谢。

2 个答案:

答案 0 :(得分:1)

这与范围有关。

我假设您在与

相同的级别实例化$functionsDBConn = new DBConn();
$a = test();

如果是这样,你有2个选项

一:

function test(){
    global $functionsDBConn;
    $res = $functionsDBConn->checkBracketGanador($id_torneo);
    return $res;
}

$functionsDBConn = new DBConn();
$a = test();
echo $a;

二:

function test(&$functionsDBConn){
    $res = $functionsDBConn->checkBracketGanador($id_torneo);
    return $res;
}
$functionsDBConn = new DBConn();
$a = test($functionsDBConn);
echo $a;

基本上,您必须通过告诉test()函数在全局范围global $functionsDBConn;中可用或将其作为一个函数传递给函数,使您在test()函数范围内实例化的对象可见。参数。

你也可以使checkBracketGanador()成为一个静态的方法,但是不要急于复杂。

答案 1 :(得分:1)

在函数中使用global关键字。函数内部的变量不会调用其范围之外的值。

function test(){
    global $functionsDBConn;
    $res = $functionsDBConn->checkBracketGanador($id_torneo);
    return $res;
}