2013-03-20 83 views
0

我不熟悉PHP OOP,現在我遇到了一些麻煩。我在結構化編程(而不是OOP)中開發我的項目,並且我已經包含了一個類(由其他人制作),並且在我的結構化函數中,我必須初始化類並執行其他操作。如果你不明白我在這裏打字,請觀看代碼:php中的函數調用構造函數並初始化對象

<?php 
require __DIR__ . '/SourceQuery/SourceQuery.class.php'; 

function get_server_info($ip, $port){ 

    define('SQ_SERVER_ADDR', $ip); 
    define('SQ_SERVER_PORT', $port); 
    define('SQ_TIMEOUT',  5); 
    define('SQ_ENGINE',  SourceQuery :: GOLDSOURCE); 

    $Query = new SourceQuery(); 

    try 
    { 
     $Query->Connect(SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE); 

     $result = (array)$Query->GetInfo(); 

    } 
    catch(Exception $e) 
    { 
     $result = array('Players' => 0, 'MaxPlayers' => 0); 
    } 

    $Query->Disconnect(); 
    unset($Query); 
    return array('players' => $result['Players'], 'max_players' => $result['MaxPlayers']); 
} 
?> 

基本上我創建了一個名爲函數get_server_info它構造一個SourceQuery對象。我正在查詢Counter-Strike服務器的玩家人數和最大玩家人數。

我不知道這是否正確編程(與OOP混合結構)。我不想在類中更改代碼或創建方法,我想使用我的函數。每次調用都會得到結果(get_server_info()),但問題是每個結果都是一樣的!

例如:

for($i = 0; $i < 30; $i++){ 
    $result = get_server_info('66.55.44.3'.$i, 27015); 
    echo $result['players'].' - '.$result['max_players'].'<br />'; 
} 

結果爲任何服務器一樣! (是的,他們都在運行)。當我檢查我的服務器查看器程序中的服務器時,他們有不同數量的玩家,但是我從這個循環得到的結果是一樣的!我不知道爲什麼。

如果我手動逐個查詢,我得到正確的結果。

我認爲這是因爲該對象沒有被刪除或....我不知道。

+1

你究竟在哪裏有'哪個在你的代碼中構造一個SourceQuery對象? – 2013-03-20 21:31:39

+0

對不起,我忘記了添加代碼 – 2013-03-20 21:35:14

回答

1

我認爲這是因爲你試圖覆蓋一個常量。 (define

某處定義的常量在代碼中的任何功能外,並通過$id$port 直接到類。你在哪裏初始化了$Query

嘗試:

define('SQ_TIMEOUT',  5); 
define('SQ_ENGINE',  SourceQuery :: GOLDSOURCE); 

function get_server_info($ip, $port){ 

    try 
    { 
     $Query->Connect($ip, $port, SQ_TIMEOUT, SQ_ENGINE); 
+0

我已編輯我的帖子。對不起。 – 2013-03-20 21:35:37

+0

現在工作正常!它是由於我使用了常量而引起的問題。 – 2013-03-20 21:39:26

1

你忘

$Query = new SourceQuery(); 

here一個例子。

相關問題