繁体   English   中英

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

[英]call another class's function inside a class

我有2节课

  1. 对于数据库
  2. 语言

我想在数据库中使用我的语言,以便输出结果

例如:

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]");

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

PS:语言类在名为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,当我在外部没有声明它时,希望现在使事情变得更清楚

为什么仍使用PHP4语法?

创建db_control类的实例时,将要存储为$lan_var的对象传递到构造函数中,或通过专用的setter进行设置。 请参阅依赖注入

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);

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

使您的语言类方法static 在这里阅读更多。

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

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

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

这可以解决问题。

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

但是也许您应该考虑使其成为静态方法。 在这种情况下,您可以通过以下方式调用它:

LanguageClassOrWhateverItIsCalled::getVar($langvals[lang_con_est]);

您可以像下面这样定义static方法:

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

编辑:@SAFAD

您应该为此使用静态方法。 要使此工作正常,请确保已加载您的类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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM