0

我不熟悉 php OOP,现在我遇到了一些麻烦。我正在用结构化编程(不是 OOP)开发我的项目,并且我已经包含了一个类(由其他人制作),并且在我的结构化函数中,我必须初始化类并执行操作。如果您不明白我在这里输入的内容,请观看代码:

<?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 />';
}

结果对于任何服务器都是一样的!(是的,它们都已启动并运行)。当我在我的服务器查看器程序上检查服务器时,他们有不同数量的玩家,但我从这个循环中得到的结果是一样的!我不知道为什么。

如果我一一手动查询,我会得到正确的结果。

我认为这是因为该对象没有被删除或....我不知道。

4

2 回答 2

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 );
于 2013-03-20T21:33:54.477 回答
1

你忘了

$Query = new SourceQuery( );

请参阅此处的示例。

于 2013-03-20T21:35:47.473 回答