2013-07-23 137 views
0

我知道那不是最好的标题我的问题,但我coulnd't想出一个更好的(建议,欢迎)如何从其他函数文件调用类的函数?

好了,这是我的情况,我有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 - 在这个文件是我创建会话和对象数据库康涅狄格州。代码:

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; 

我不断收到此错误:

致命错误:调用成员函数checkBracketGanador()在一个非对象在.../someFolder/workingOn.php在线67

我试过了使公共职能classDBConn但没有工作

我在做什么调用函数外的函数和发送结果作为参数传递给其他的功能,但,这是我想避免

任何到底是什么帮助是欣赏。提前致谢。

回答

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()是一个静态方法,但不要急于复杂。

+0

选项1是赢家,它的魅力。谢谢bro – Mollo

1

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

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

感谢您的帮助 – Mollo

相关问题