[英]Calling a static method when the class is a variable with namespaces
我有以下代碼,這些代碼是我整理在一起的小框架中使用的。 我的框架最初並不使用命名空間,但是由於兩個類名稱在該項目中發生沖突,因此我認為現在是嘗試此方法的好時機。 執行腳本時將引發以下錯誤:
[Wed May 02 15:04:33 2012] [error] [client 127.0.0.1] PHP Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING in /home/marco/Projects/stackgaming.com/app/server.php on line 17
以下是與錯誤相關的以下代碼段:
app / server.php
if( !defined('IN_APP') ) { die('THESE ARE NOT THE DROIDS YOU ARE LOOKING FOR'); }
require_once('model/Server.php');
\Model\Server::$save_path = APPLICATION_ROOT . 'servers';
class Server extends App
{
public static function init($server_id)
{
$server_data = \Model\Server::get($server_id);
$game = $server_data['interface'];
require_once('model/' . $game . '.php');
$query_data = \Model\$game::query($server_data['host'], $server_data['query_port']);
var_dump($server_data);
var_dump($query_data);
//static::$View->display('user_main.tpl');
}
}
這是model / Minecraft.php文件,這是$game
解析的文件。
<?php
namespace Model;
class MinecraftException extends \Exception
{
// Exception thrown by Minecraft classes
}
class Minecraft
{
public static function query( $host, $port = 25565, $timeout = 3 )
{
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => $timeout, 'usec' => 0));
if( $socket === false || @socket_connect($socket, $host, (int)$port) === false )
{
return false;
}
socket_send($socket, "\xFE", 1, 0);
$len = socket_recv($socket, $data, 256, 0);
socket_close($socket);
if( $len < 4 || $data[ 0 ] != "\xFF" )
{
return false;
}
$data = substr($data, 3);
$data = iconv('UTF-16BE', 'UTF-8', $data);
$data = explode("\xA7", $data);
return array
(
'hostname' => substr($data[0], 0, -1),
'total_players' => isset($data[1]) ? intval($data[1]) : 0,
'max_players' => isset($data[2]) ? intval($data[2]) : 0
);
}
}
如果我從Minecraft類中刪除了命名空間,那么它可以正常工作,但是如果我要使用命名空間,那我不應該一直走嗎?
我發現這個問題比找到解決方案要早得多。 為了大家的利益,這里是解決當前問題的有用鏈接: PHP中具有名稱空間的變量函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.