2010-09-02 67 views
0

我有2个班调用另一个类的一个类的内部功能

  1. 为DB
  2. 语言

我想用我的语言的东西在DB 因此它输出的结果

ex:

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 =新lang_vars; 的db_control里面显示错误意外T_something预期T_Function ,当我没有外面声明它 希望我做的事情更清楚了吧

回答

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

而且,摆脱了全局的。也可以通过依赖注入来传递它们。

+0

你的意思是php4的语法? 我从来没有使用PHP4 – SAFAD 2010-09-02 12:23:11

+2

@SAFAD你正在使用'var'关键字来声明类属性。 [这是PHP4语法](http://php.net/manual/en/oop4.php)。此外,您没有使用[可见性声明](http://de.php.net/manual/en/language.oop5.visibility.php)。查看[手册](http://de.php.net/manual/en/language.oop5.php)和[本教程](http://thinkvitamin.com/dev/getting-started-with-oop -php5 /)和这[简介](http://stackoverflow.com/questions/2206387/learning-php-class/2206835#2206835) – Gordon 2010-09-02 12:26:37

+0

好吧好吧 也许我还在用旧的东西 我应该替换什么“var”与? – SAFAD 2010-09-02 12:28:32

1

让你的语言类方法staticRead more here.

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

然后,您可以使用它的功能,而像这样创建对象:

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

你能更具体吗? 哪些课我使它静态和哪些不是 – SAFAD 2010-09-02 11:57:18

+0

@SAFAD,我已经更新了答案。你需要通过在其定义中加入'static'关键字来使你的语言类的功能成为静态的。 – shamittomar 2010-09-02 12:00:31

+0

好吧,我做了,但这个奇怪的错误对我感兴趣的$ LangClass :: getvar(“$ langvals [lang_con_est]”)行上出乎意料的T_PAAMAYIM_NEKUDOTAYIM ; – SAFAD 2010-09-02 12:04:49

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"); 
} 
+0

非常感谢很多人 我不得不在类 中的每个函数内部创建对象是否有任何解决方案来创建一次并在任何地方使用它? – SAFAD 2010-09-02 12:21:50

+0

对不起,我以前的意见 我发现,我可以得到只有1语言变量使用该行 这意味着 如果我有另一个查询像INSERT或我不能使用该行来显示查询插入或不 – SAFAD 2010-09-02 13:34:46

+0

我的错误 该功能根本不起作用 – SAFAD 2010-09-02 14:09:52

相关问题