在类中调用另一个类的函数

时间:2010-09-02 11:53:22

标签: php oop

我有2个班级

  1. for DB
  2. for language
  3. 我想在数据库中使用我的语言 所以它输出结果

    前:

    class db_control{
    
            var $db_connection, $lang_var;
            //create the function for the connection
            function db_connect(){
                //define some variables
                global $db_host, $db_username, $db_password, $db_name, $lang_var;
                $this->db_connection = mysql_connect("$db_host","$db_username","$db_password")or die("can't connect to server with these informations");
                //checl that the connection is established
                if($this->db_connection){
                    echo $lang_vars->getvar("$langvals[lang_con_est]");
                }
    

    但是这个

    $lang_vars->getvar("$langvals[lang_con_est]");
    

    不起作用 我的意思是它输出许多问题 并且我确定我的问题是我没有正确定义我的变量和类

    P.S:语言类位于文件中,名为language.php,此部分位于DB.MySQL.php中

    编辑: 这是语言课

    class lang_vars{
        public static function getvar($variable){
            return $variable;
        }
    }
    

    我希望DB类显示语言类中的文本 这就是为什么我用

     echo $lang_vars->getvar("$langvals[lang_con_est]");
    

    但它不起作用 因为我宣布语言课 $ lang_vars = new lang_vars; 在db_control中,它显示错误意外的T_something预期T_Function 当我宣布它没有任何东西 希望我现在能让事情变得更清楚了

3 个答案:

答案 0 :(得分:2)

您还在使用PHP4语法的原因是什么?

创建db_control类的实例时,将要存储为$lan_var的对象传递给构造函数,或通过专用的setter设置它。请参阅Dependency Injection

class DBControl
{
    protected $_lang;
    public function __construct($lang = NULL)
    {
        if($lang !== NULL) {
            $this->_lang = $_lang;
        }
    }
    public function setLang($lang)
    {
        $this->_lang = $lang;
    }
}

然后做任何一次

$dbControl = new DBControl(new LangThing);

$dbControl = new DBControl;
$dbControl->setLang(new LangThing);

另外,摆脱全局变量。通过依赖注入传递那些。

答案 1 :(得分:1)

制作语言课程方法static Read more here.

class LangClass
{
    public static function getvar()
    {
        // your code here
    }
}

然后,您可以使用其功能而无需创建如下对象:

  $LangClass::getvar("$langvals[lang_con_est]");

答案 2 :(得分:1)

这可以解决问题。

$lang_vars = new LanguageClassOrWhateverItIsCalled();
$lang_vars->getvar($langvals[lang_con_est]);

但也许您应该考虑将其作为一种静态方法。在这种情况下,你可以用:

来调用它
LanguageClassOrWhateverItIsCalled::getVar($langvals[lang_con_est]);

您可以将方法静态定义为:

public static function getVar() {
    // Do something
}

编辑:@SAFAD

您应该使用静态方法。要使其工作,请确保加载了class language.php。为此,只需在DB.MYSQL.php文件中添加以下行:

require_once('language.php');

class db_control {
    ...

确保您拥有language.php文件的正确路径。

然后你应该像这样调用db_control类中的方法:

if($this->db_connection){
    echo lang_vars::getvar("$langvals[lang_con_est]");
}

此外,这样的功能有什么用?你应该这样做:

if($this->db_connection){
    echo $langvals[lang_con_est];
}

或将静态getvar方法更改为:

public static function getvar($variable){
    return $langvals[$variable];
}

你的函数调用:

if($this->db_connection){
    echo lang_vars::getvar("lang_con_est");
}