初始化数组在PHP中返回null

时间:2013-12-31 15:38:09

标签: php arrays

我正在使用HTML5 WebSockets进行一个项目,使用一个使用websockets库的PHP服务器here at Github.

我的项目还取决于知道有多少玩家在线。该库有三种抽象方法,connectedclosedprocess。在connectedclosed中,它采用参数$user,这是一个自定义类,其中包含随机字母数字字符串作为变量id

我的班级开头有一个protected $users = [];,在我的班级里面,它扩展了图书馆提供的WebSocketServer。在我的connected方法中,我array_push $user提供给$users数组。然后,在我的closed方法中,我遍历$users数组,检查$users中的元素是否与提供的$id具有相同的$user,并且然后array_splicing如果那是尝试那个元素。

所以。这是我的问题。当我以root身份运行我的PvPASCIIServer.php,并使用测试网页连接时,一切正常。但是,当我断开连接时,它说:

PHP Warning:  array_splice() expects parameter 1 to be array, null given in /var/www/PvPASCII/PvPASCIIServer.php on line 24

不应array()不将$users初始化为null吗?为什么会这样?我也尝试使用初始化数组的文字格式[],但即使这样也行不通。甚至更凶悍,我的array_push函数开头的connected没有返回错误消息。逻辑上,它应该工作并将$user推送到$users数组的末尾,因此即使它被初始化为null,它之后也不应该为null。



我的代码,如果你需要它:

#!/usr/local/bin/php
<?
require_once("websockets.php");

class PvPASCIIServer extends WebSocketServer
{
    protected $users = [];

    protected function connected($user)
    {
        $this->send($user, "say Pong!");
        array_push($this->users, $user);
        echo $user->id;
        return true;
    }

    protected function closed($user)
    {
        echo "Client " + $user->id + " disconnected from the server.";
        for($i = 0; $i < sizeof($this->users); $i++)
        {
            if($this->users[$i]->id == $user->id)
            {
                array_splice($users, $i, 1); // <--  Line with the error
            }
        }
    }

    protected function process($user, $message)
    {
        // Yet to be determined.
    }
}

$host = "localhost";
$port = 3000;

$server = new PvPASCIIServer($host, $port);
$server->run();
?>

2 个答案:

答案 0 :(得分:4)

$users需要$this->users,就像你班上其他地方一样:

if($this->users[$i]->id == $user->id)
{
     array_splice($this->users, $i, 1); // <--  Line with the error
}

答案 1 :(得分:2)

array_splice($users, $i, 1); // <--  Line with the error

应该是:

array_splice($this->users, $i, 1); // <--  Line with the error

因为你想使用类变量$ users而不是函数变量$ users

编辑:
约翰康德也说了什么(他打字的速度要快一点;-))