2010-09-02 93 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