2013-03-20 42 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一个例子。

相关问题