我不熟悉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对象。我正在查询反恐精英服务器的数量是多少玩家和最大玩家。
我不知道这是否是正确的编程(混合结构与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 />';
}
任何服务器的结果都一样! (是的,它们都已启动并运行)。当我检查我的服务器查看器程序上的服务器时,他们有不同数量的玩家,但我在这个循环中的结果是相同的!我不知道为什么。
如果我逐个手动查询,我会得到正确的结果。
我认为这是因为没有删除对象或......我不知道。
答案 0 :(得分: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 );
答案 1 :(得分:1)